我試圖阻止我的cron腳本允許它並行運行。我需要它,以便如果當前沒有執行它,腳本將被允許運行直到它完成,腳本超時或發生異常。停止並行執行PHP腳本
我一直在嘗試使用PHP flock函數進行文件鎖定,運行腳本並釋放鎖定。但是,它仍然看起來像我能夠並行運行腳本多次。我錯過了什麼嗎?
順便說一句,我正在開發與Mac文件系統的Mac OS X,也許這是文件鎖被忽略的原因?雖然PHP文檔只看起來關於NTFS文件系統?
// Construct cron lock file path
$cronLockFilePath = realpath(APPLICATION_PATH . '/locks/cron');
// Get cron lock file
$cronLockFile = fopen($cronLockFilePath, 'r');
// Lock cron lock file
if (flock($cronLockFile, LOCK_EX)) {
echo 'lock';
sleep(10);
} else {
echo 'no lock';
}
處理錯誤不應該是一個問題,我只會捕獲所有異常,然後取消鏈接創建的文件...但我想象,處理腳本終止是不可能的,例如服務器重新啓動,apache重新啓動或腳本超時。 。因爲它是一個cron文件,我可能會讓腳本運行而不會超時。 – cappuccino 2010-06-26 08:08:44
您可以嘗試使用兩個腳本:第一個創建「鎖定」文件,執行當前的cron腳本,然後刪除「鎖定」文件。所以即使你的當前cron腳本爆炸了,第一個腳本仍然會刪除鎖定。 我已經做過的另一件事是:如果腳本檢測到「lock」文件存在,但filectime超過一個小時,則繼續前進並將其刪除,因爲很可能出現問題。 – FlorianH 2010-06-26 09:43:40