Php

檢查 PHP 腳本是否正在執行,如果沒有執行它

  • October 12, 2019

我正在執行一個PHP文件

nohup php server.php &

這會偵聽特定埠並根據輸入執行操作。

問題是有時腳本會停止。我無法使用 cron 作業來解決此問題,因為我的伺服器一直在監聽埠並且還在創建子程序。

有沒有辦法檢查是否server.php正在執行並(如果沒有)啟動它?

您可以使用 來檢查程序ps,但一個缺點是,如果您有多個此程序的實例正在執行,或者腳本被掛起,則此方法可能無法確定。

我更喜歡實際檢查伺服器是否正在偵聽埠。這裡有幾種方法可以做到這一點。例如,如果您的伺服器正在偵聽埠 2000,請考慮以下內容。

使用lsof

lsof -i :2000; echo $?;

lsof正在檢查打開的文件描述符,並應顯示程序是否正在偵聽或在此埠上主動通信。0如果伺服器正在接受埠 2000 上的連接,這將回顯 a ,否則將回顯 a 1

使用nc

nc -z -w1 192.168.1.12 2000 &> /dev/null; echo $?;

這是我檢查套接字伺服器的首選方法。這nc是使用-z零 I/O 模式的標誌來快速掃描埠。您可以在此處使用您的 IP 地址和正確的埠。如果伺服器正在接受連接,那么生活就很好。

同樣,這裡的返回值將是0好的或1不好的。我們在這裡丟棄任何輸出,因為我們只想要一個快速的布爾檢查。如果網路地址可達,此方法返回速度非常快。從伺服器本身執行,您幾乎看不到任何延遲,因為它正在嘗試與自己對話。

自動化

要通過 cron 執行這些測試,請創建一個 bash 腳本並執行這些命令中的一個或兩個,並執行一系列邏輯檢查。如果他們失敗重新啟動您的腳本並重新檢查。我已經使用這些方法好幾年了,並且在實際正常執行時間方面取得了非常好的結果。

引用自:https://unix.stackexchange.com/questions/213073