Linux

找到 *nix 程序的來源?

  • September 17, 2018

我有一個在同一個 EC2 上執行的開發和 QA Web 伺服器。我創建了一個 shell 腳本(通過 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

這一切都很好,但現在是時候為我們的 QA 伺服器啟動工作程序了(上面是 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

引用自:https://serverfault.com/questions/930988