也就是,當程式已經執行,或是尚未執行完畢,則不會再另外執行。
要達成此效果,便須要判斷該程式目前是否有在執行。
以下範例是使用 bash shell script 執行 /home/mytest.php 這個 php 程式,
每隔 3 秒執行一次,
並配合 ps、grep、wc 三個指令,判斷該程式目前是否仍在執行中,
若沒有,才會再次執行 php /home/mytest.php。
#!/bin/bash while : do sleep 3 ProcNumber=`ps -ef | grep 'mytest.php' | grep -v 'grep' | wc -l` if [ $ProcNumber -eq 0 ];then php /home/mytest.php & fi done
說明:
- ps -ef
e:顯示所有的行程。
f:顯示完整資料,這有我們要的程式執行路徑。 - grep 'mytest.php'
找出有 mytest.php 字串的行程。 - grep -v 'grep'
排除有 grep 字串的行程 ,就是排除掉 grep 'mytest.php' 這個行程。 - wc -l
計算符合前面過濾條件的資料有幾行,
也就是得到目前行程中,有 mytest.php 字串的有幾個。
如此便可以判斷 mytest.php 是否有在執行中。
(當然要避免 mytest.php 在其他不相關行程也出現的話,就是把名字設獨特一點,或是過濾條件嚴謹一點,例如加路徑等。)
沒有留言:
張貼留言