[FreeBSD][Shell Script] 檢查以 PHP 方式常駐的程式是否存活

Standard

之前寫了一隻噗浪機器人,以 PHP Command-line 模式運行於 FreeBSD 中,但偶爾會因不明原因消失,有空就得去重啟一下。

在 Google 上搜尋到一篇相關的 教學,在此做了一點小改變,留作紀錄或許之後還會用上。

Shell Script (bash) 程式碼如下:

[code]
#!/usr/local/bin/bash
# shell name: watchdog.sh

ps=`ps -ax > /tmp/ps.txt`

p=`grep "php /xxx/plurk.php" /tmp/ps.txt | awk ‘{print $6}’`
if [ "$p" != "/xxx/plurk.php" ]; then
nohup php /xxx/plurk.php &
sleep 1
fi
p=”
[/code]

把 ps -ax 的結果丟到 /tmp/ps.txt 中,再用 grep 去撈,這是因為 .. 如原文作者 hoyo 所說,「因為 grep 自己也會產生程序,會干擾到真正的執行程序,因此最後使用 ps 轉向檔案,然後才到檔案查詢。」

接著,因為 ps -ax 產生的東西會像這樣:
48122 2 S 0:01.39 php /xxx/plurk.php

我只要比對最後面那一段 /xxx/plurk.php 就好,所以利用 awk 指令抓出第六欄。如果不相等,就代表這個程式可能已經消失了,所以就再執行一次吧。

最後把這隻 sh 放到 crontab 去定期執行就可以了。
這就是解決方法,再觀察看看是不是都能正常運行囉 :)

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *