Linux
找到 *nix 程序的來源?
我有一個在同一個 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