сценарий оболочки для проверки работоспособности процесса

Я хочу проверить, запущен ли процесс:

[nyxqa@qckmaccg102 scripts]$  ps -fu nyxqa
UID        PID  PPID  C STIME TTY          TIME CMD
nyxqa    19620     1  0 08:42 ?        00:00:00 ./ArcaDirect ITD
nyxqa    19628     1  0 08:42 ?        00:00:00 ./ADViewerWebOps

Я хочу посмотреть, запущен ли процесс ArcaDirect ITD с помощью оболочки

0
задан 16 August 2015 в 22:31

2 ответа

См. man pgrep. так как я не имею ArcaDirect, но действительно имею NetworkManager

(0)$ pgrep NetworkManager
1400
(0)$ pgrep ArcaDirect
(1)$ 

, Это - то, что я ввел на терминале

(0)$ pgrep NetworkManager
4011
(0)$ pgrep ArcaDirect
(1)$ if  $(pgrep NetworkManager >/dev/null)  ; then
  echo "Running"
  else
  echo "Restart needed"
  fi
Running
(0)$ if  $(pgrep ArcaDirect >/dev/null)  ; then echo "Running"; else echo     "Restart needed"; fi
Restart needed
(0)$ 
3
ответ дан 17 August 2015 в 08:31
  • 1
    Можно ли попытаться поместить /home/.rvm/rubies/ruby-2.3.1/bin/ruby в Ваш monday.sh сценарий и видеть ли, выполняет ли крон задание правильно? – WinEunuuchs2Unix 7 November 2016 в 23:25

Принятие up Вы подразумевали это, если процесс работает в момент проверки.

Можно использовать ps (как Вы упомянули), или pgrep, поскольку Вы хотите использовать его в сценарии, я предложил бы, чтобы Вы использовали pgrep для его простоты.

Например, позволяет проверке если firefox работает:

$ pgrep firefox  ## Firefox is running, Shows the PID of firefox
17032

$ echo "$?"  ## Exit status is 0 (One (or more) matched process(es) found)
0


$ pgrep firefox  ## Firefox is Not running, Shows nothing

$ echo "$?"  ## Exit code in this case is 1
1

Существует очень важная выгода хотя в ее форме по умолчанию pgrep соответствует имени как образцу регулярного выражения против имен процесса. Таким образом, если процесс имеет имя как firefox_foobar и Вы пытаетесь проверить если firefox работает pgrep firefox, это покажет PID процесса firefox_foobar. Следовательно Вы получили бы идею это firefox работает, но на самом деле нет.

Вот пример:

$ pgrep firefox_foobar
19002

$ pgrep firefox
19002

Для преобладания над этой проблемой, необходимо соответствовать точному имени процесса с помощью -x опция pgrep :

$ pgrep -x firefox_foobar  ## Shows the PID of firefox_foobar
19002

$ pgrep -x firefox  ##Shows nothing as firefox is not running

Таким образом, вкратце Ваш сценарий мог принять форму:

if pgrep -x 'ArcaDirect ITD' &>/dev/null; then echo "Running"; else echo "Not running"; fi
1
ответ дан 17 August 2015 в 08:31
  • 1
    Это работало. Таким образом, поскольку Вы предположили, что необходимо использовать полный путь везде. крон может выполнить скрытые файлы также. – Asarluhi 7 November 2016 в 23:53

Другие вопросы по тегам:

Похожие вопросы: