目標:
1. 用 shell script 代替 crond 每五分鐘執行一次程式
2. 自動偵測程式卡住時,要砍掉該程式
程式:
#!/bin/bash
while true;
do
#drop cache program into sub shell and run in background.
(/usr/bin/php -q /path/to/cache_program.php \
> /path/to/website/cache/cache_this.htm &)
# main shell waits for 5 minutes.
sleep 300
# kill processes we find. cache program should
# be done in second.
for i in `ps ax | grep cache_program.php | awk {'print $1'}`
do
if [ ${i} ]; then
kill ${i}
fi
done
# now restart cache program
done
程式說明:
正常來說執行該cache程式其實是很快的,一瞬間就會結束,但重點是若不用sub shell執行此程式,當卡住時,根本不會執行到sleep 300這指令,而是無限時間等待cache程式結束。因此用sub shell代為執行,並等待 300 秒,若300秒還沒執行完畢,表示程式卡住了,無條件砍掉,然後重新執行。
php-cli 有獨立的 php.ini
回覆刪除可以考慮設定 timeout 時間。