2014-03-04 52 views
0

如果每分鐘執行cron作業正在執行一個花費時間超過1分鐘的文件,Unix內核會執行什麼操作?Unix Cron Jobs工作算法

例如:

我有以下shell命令來執行PHP腳本的每一分鐘。

* * * * * php /home/user/public_html/script.php 

和我的PHP腳本由SQL代碼來選擇從數據庫進行電子郵件和使用循環發送郵件給定的電子郵件。

問題:如果我的數據庫包含成千上萬的郵件需要超過1分鐘才能完成第一次執行,系統內核將如何響應。

回答

3

它會再次執行它,除非您自己採取措施防止多個實例運行。您可以通過運行一個腳本,做測試:

date >> /tmp/a 
sleep 90 
date >> /tmp/a 
+0

你的意思是如果我在分貝中有10k封郵件,並且它在1分鐘內只發送2k封郵件,則它將停止執行,並且會在下一個每分鐘2k郵件的間隔內處理剩餘的8k郵件。 –

+0

不,我的意思是它將繼續處理所有的10k郵件直到它完成,並且1/5通過它的方式將開始另一個重疊的工作並且重新並行地完成。 –

+0

有點混亂,但我想我明白了。 –

0

你有2種選擇:

  1. 降低的cron頻率 - 確保作業完成
  2. 使用鎖,以防止工作在運行時執行。

我們經常使用選項二,只需向數據庫或文件系統寫入鎖定標誌 - 然後在腳本完成後清除它。