Найти источник процесса * nix?

У меня есть веб-сервер разработчика и QA, работающий на одном EC2. Я создал сценарий оболочки (который вызывается через Cron), чтобы проверить, запущен ли процесс, и если нет, перезапустить его.

Сценарий оболочки:

#!/bin/bash

process="php"
makerun="/usr/bin/php /var/www/html/api/artisan queue:work --queue=high,default --memory=512"


if ps ax | grep -v grep | grep $process > /dev/null
then
  exit
else
  $makerun &>/dev/null &
fi

exit

Все это работает хорошо и замечательно, но теперь пора запустить воркер для нашего сервера контроля качества (выше - dev), и, очевидно, он ничего не сделает, поскольку имя процесса будет одинаковым в обоих случаях.

Тем не менее, знает ли кто-нибудь способ определить, что вызвало этот процесс? Если бы я знал, что один из них запускается с пути разработчика, я мог бы переписать сценарий bash, чтобы он был намного умнее и, в свою очередь, контролировал бы процесс как для разработчика, так и для QA.

Любое понимание было бы признательно!

1
задан 15 September 2018 в 00:58
1 ответ

Я не уверен, правильно ли я понял вашу проблему:

В моих системах Linux ps ax (или ps -Alf ) уже показывает полный путь к исполняемому файлу, который использовался для запуска соответствующего процесса (по крайней мере, во многих случаях). Сможете ли вы в конечном итоге использовать это?

Например, на компьютере с Debian Stretch (отрывок):

root@charon:~# ps -Alf
4 S message+   447     1  0  80   0 - 11283 SyS_ep Aug31 ?        00:00:00 /usr/bin/dbus-daemon --system --address=syste
4 S root       468     1  0  80   0 - 11625 SyS_ep Aug31 ?        00:00:03 /lib/systemd/systemd-logind
4 S root       674     1  0  80   0 -  3634 core_s Aug31 tty1     00:00:00 /sbin/agetty --noclear tty1 linux
4 S root       708     1  0  80   0 - 17486 core_s Aug31 ?        00:00:00 /usr/sbin/sshd -D
5 S ntp        712     1  0  80   0 - 24467 core_s Aug31 ?        00:00:36 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 109

Следовательно, чтобы получить полный путь, вам нужно будет использовать grep для последней части каждой строки, например:

root@charon:~# ps -Alf|awk '{print $15}'
/usr/bin/dbus-daemon
/lib/systemd/systemd-logind
/sbin/agetty
/usr/sbin/sshd
/usr/sbin/ntpd
1
ответ дан 3 December 2019 в 23:12

Теги

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