2011-02-15 46 views
0

我有一個用cron作業啓動的用PHP編寫的腳本。這是一個長時間運行的腳本,並且在最後一次完成之前,通常cron會踢出另一個實例。沒關係。我允許在任何給定時間運行此腳本的3個實例。PHP/Cron限制併發運行腳本的數量

我限制腳本使用此代碼3個實例在腳本的頂部:

exec('ps -A | grep nameofmyscript', $results); 
if (count($results) > 4) { 
    echo "Already Running\n" 
    die(0); 
} 

它的工作原理,但我正在尋找一種更好的方式。這種方法在我重新編寫腳本幾周之前就對我產生了影響,並忘記更改該代碼行。當腳本命名與某個已經運行的進程類似時,它也會失敗。

回答

2

使用PHP,您可以創建特定的cron作業目錄中的隨機命名鎖定文件。在讓PHP腳本繼續之前,檢查目錄中存在的鎖文件的數量。這可能不是最好的解決方案。

1

你可以自動化的名字放置...

exec('ps -A | grep ' . escapeshellarg(basename(__FILE__)) , $results); 
if (count($results) > 4) { 
    echo "Already Running\n" 
    die(0); 
} 
+0

這是比我目前的解決方案更好的方法。我可能必須使用basename(__ FILE__),因爲完整路徑不包含在ps輸出中。但是它仍然不能防止與系統上運行的類似命名的腳本發生衝突。 – mellowsoon 2011-02-15 02:35:04

+0

@mellowsoon啊是的,`basename()`會更好,我忘了:P。如果你向我展示`ps -A`的輸出,我會給你寫一個正則表達式,它應該完美地匹配你的PHP文件。 – alex 2011-02-15 02:43:38