找到 *nix 进程的来源?

找到 *nix 进程的来源?

我有一个开发和 QA Web 服务器在同一个 EC2 上运行。我创建了一个 shell 脚本(通过 Cron 调用)来检查某个进程是否正在运行,如果没有,则重新启动它。

Shell 脚本:

#!/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

这一切都运行良好,但现在是时候启动我们的 QA 服务器(上面是 dev)的工作程序了,显然它不会做任何事情,因为在两种情况下进程名称是相同的。

话虽如此,有人知道确定是什么调用了该进程的方法吗?如果我知道一个是从 dev 路径启动的,那么我可以重写 bash 脚本,使其更加智能,进而监控 dev 和 QA 的进程。

任何见解都将不胜感激!

答案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

相关内容