У меня есть веб-сервер разработчика и 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.
Любое понимание было бы признательно!
Я не уверен, правильно ли я понял вашу проблему:
В моих системах 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