2014-11-08 25 views
0

我正在設置一個cron作業,每分鐘執行一次腳本page.php 我想了解併發性。 它自己需要15分鐘才能完成的腳本,那麼cron將如何運行?在cron中處理併發性php

Lets take a time frame of 15 minutes, how many crons will run in that time? 1 or 15? 

will cron runs till its completion or it can be interrupted? 

Thanks. 

回答

0

當你通過cron啓動一個php腳本時,它會一直運行,直到它完成或超過執行時間。 無論最後一個腳本是否仍在運行,系統將始終啓動腳本的新實例。

如果您知道腳本運行很長時間,您應該設置一個bash腳本來檢查腳本是否已經運行,並且只有在不是這種情況時才啓動php腳本。

0

Cron不會爲您處理併發 - 您的腳本必須這樣做。

原來,這很容易,因爲有一個微不足道的PHP操作,那就是原子:unlink()

我們傾向於使用這種方式:

  • 全局標誌文件使腳本
  • 主要cron作業不只是摸了計時標誌文件
  • 每一分鐘,另一cron作業開始工人腳本
  • 這個工人腳本在全局標誌文件
  • 試圖unlink()如果不suceed(結果評估爲假),它退出(這可以確保,只有一個實例[R同時UNS)
  • 這個工人腳本試圖在計時器標識文件unlink()
  • 如果不suceed(結果評估爲假),它touch()上課全局標誌,文件和退出(這可以確保,一個cron運行開始至多一個實例)
  • 現在完成後運行
  • ,它touch()上課全局標誌文件重新啓動的週期

這樣,cron的運行,這將導致併發性,被排除在外以可記錄的方式。

+0

這不是我的問題 – Badddy 2014-11-08 15:59:02

+0

你可能會考慮編輯你的問題來解釋它好一點 - 也許我不是唯一一個誤解它? – 2014-11-08 20:47:15

0

它取決於您的計劃任務/ cron設置。您可以配置啓動15次PHP腳本,或者在完成上一個作業時啓動它。
您的計劃任務/ cron可以由它自己中斷,通過外部信號或通過您在計劃任務/ cron中所做的配置(如果在N分鐘內未完成,則停止作業...)
希望對您有所幫助:)