Я хочу проверить, запущен ли процесс:
[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 с помощью оболочки
См. 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)$
Принятие 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
/home/.rvm/rubies/ruby-2.3.1/bin/ruby
в Вашmonday.sh
сценарий и видеть ли, выполняет ли крон задание правильно? – WinEunuuchs2Unix 7 November 2016 в 23:25