2011-11-22 147 views
2

我有3個腳本可以做一些事情。 我想連續並且同時運行它們。php腳本持續運行,並與cronjob同時運行

比方說,例如: 第一個腳本花了30分鐘才完成。 第二 - 20分鐘。 第三 - 5分鐘。

所以我需要他們中的每個人在完成後立即運行。 3個腳本在同一個數據庫中進行更新,但他們需要單獨工作。 他們可以一起跑,但不是幾次(我的英語很爛,對不起)。 讓我們來解釋一下我的意思是用例如:

firstScript.php is running 
secondScript.php is running 
thirdScript.php is running 

firstScript.php trying to start but it still running. Wait.(till finish) 

可能有些shell腳本將做的工作,但如何?

+0

所有三個腳本都可以通過url訪問嗎?我唯一能想到的就是創建一個cron腳本,它們依次捲曲並等待響應,然後再運行下一個腳本,但這是一個非常難看的解決方案。考慮一下 - 這些腳本是否可以通過您網站中其他地方的用戶流量來運行,使用它們的請求來進行遠程調用? php作爲「請求運行」的本質使其很難用於這樣的任務。 – DeaconDesperado

+0

沒有。 他們無法通過網址訪問。我需要手動運行它們。 – Kirev

+0

它是否可以將狀態保存到磁盤?我可以想到一些方法可以保存分頁文件的運行和運行時間,首先加載文件並確定要從中執行的操作。 – DeaconDesperado

回答

3

做一個bash腳本,需要一個參數,並將其做這樣的事情:

if [ -f /tmp/$1 ] 
then 
    echo "Script already running" 
else 
    touch /tmp/$1 
    php $1 
    rm /tmp/$1 
fi 

設置一個cron運行此腳本,並通過它,你要運行的PHP腳本的名稱。

+0

謝謝! 它工作完美! – Kirev

0

你可以在php腳本死之前執行一個shell命令。例如:

while($i < 1000) 
{ 
$i++; 
} 
shell_exec("bin/php.exe some_script.php"); 

如果你是一個共享的主機帳戶的工作,這可能無法工作做安全問題。 請注意,需要爲您的服務器編輯「bin/php.exe」,指向您的php安裝位置。

+0

嗯..它只是凍結了幾秒鐘,並且不再運行腳本。 安全模式關閉,我正在使用VPS。 – Kirev