Php
檢查 PHP 腳本是否正在執行,如果沒有執行它
我正在執行一個PHP文件
nohup php server.php &
這會偵聽特定埠並根據輸入執行操作。
問題是有時腳本會停止。我無法使用 cron 作業來解決此問題,因為我的伺服器一直在監聽埠並且還在創建子程序。
有沒有辦法檢查是否
server.php
正在執行並(如果沒有)啟動它?
您可以使用 來檢查程序
ps
,但一個缺點是,如果您有多個此程序的實例正在執行,或者腳本被掛起,則此方法可能無法確定。我更喜歡實際檢查伺服器是否正在偵聽埠。這裡有幾種方法可以做到這一點。例如,如果您的伺服器正在偵聽埠 2000,請考慮以下內容。
使用
lsof
lsof -i :2000; echo $?;
lsof
正在檢查打開的文件描述符,並應顯示程序是否正在偵聽或在此埠上主動通信。0
如果伺服器正在接受埠 2000 上的連接,這將回顯 a ,否則將回顯 a1
。使用
nc
nc -z -w1 192.168.1.12 2000 &> /dev/null; echo $?;
這是我檢查套接字伺服器的首選方法。這
nc
是使用-z
零 I/O 模式的標誌來快速掃描埠。您可以在此處使用您的 IP 地址和正確的埠。如果伺服器正在接受連接,那么生活就很好。同樣,這裡的返回值將是
0
好的或1
不好的。我們在這裡丟棄任何輸出,因為我們只想要一個快速的布爾檢查。如果網路地址可達,此方法返回速度非常快。從伺服器本身執行,您幾乎看不到任何延遲,因為它正在嘗試與自己對話。自動化
要通過 cron 執行這些測試,請創建一個 bash 腳本並執行這些命令中的一個或兩個,並執行一系列邏輯檢查。如果他們失敗重新啟動您的腳本並重新檢查。我已經使用這些方法好幾年了,並且在實際正常執行時間方面取得了非常好的結果。