2009-05-10 68 views
2

我正在爲我的php應用程序的cron作業和計劃通過wget/curl使用cron。 我的一些php cron作業可能需要2-3個小時。如何讓php從cron標籤工作2-3個小時?通過cron wget/curl來運行這麼長時間的工作是否是一個好習慣?任何人都有這方面的經驗?我也有電子郵件隊列,我需要每10秒運行一次,但cron選項卡是分鐘級別的。有關這種情況的任何建議?長時間通過wget/curl執行cron作業?

感謝您的閱讀。

回答

4

當您使用wget/curl時,您正在從Web服務器請求頁面。每個網絡服務器都會有一個暫停時間,所以這可能會超時。

也有些託管服務提供商可能會停止運行超過一定的分鐘(基本上是爲了控制流氓線程)。

因此,如果作業花費的時間超過幾分鐘,則不建議使用wget/curl進行計劃。

嘗試使用實際調度程序進行調度。 [ - ]您可以從命令行

PHP的[選項] [-f]運行php [參數...]

PHP命令應該是在路徑上。

+0

如果我從命令行使用php腳本會很長的執行時間嗎?我的一些工作確實需要很長時間。感謝您的回覆 – taras 2009-05-10 06:50:04

+0

我有一個運行14天的PHP腳本,它只是因爲內存泄漏而崩潰。記住,爲了這個工作,你需要CLI的CLI版本。 – 2009-05-11 03:41:59

+0

「我的一些工作真的需要很長時間」 它確定如果您的主機提供商允許。 – 2009-05-15 09:41:36

2

你可以用在你的腳本開始下面告訴PHP有效永不超時:

set_time_limit(0); 

什麼可能是更明智的是,如果crontab的是要運行腳本,每24小時,設定超時到24小時,這樣你就不會同時運行兩個副本。

set_time_limit(24*60*60); 

crontab的只允許分鐘級執行,因爲,這是最經常你真的應該推出一個腳本 - 有啓動/關機成本,使更多的快速調度效率低下。

如果您的應用程序需要每隔10秒檢查一次隊列,更好的策略可能是讓一個長時間運行的腳本檢查並偶爾使用sleep()來阻止系統資源佔用過多。

在UNIX系統上,這樣的腳本實際上應該作爲守護程序運行 - 查看PEAR System_Daemon包,以瞭解如何簡單地完成該操作。

2

我剛剛遇到了長時間運行的PHP腳本通過cron和wget執行的問題。由於wget中的默認超時,腳本在15分鐘後終止。

但是我相信如果設置了正確的超時時間,這種方法確實可行。您運行的PHP腳本需要設置爲無限運行時間。最好在長時間運行的腳本開始處設置它。

set_time_limit(0); 

當使用wget時,還需要通過傳遞-T0來消除超時。例如

wget -q0 -T0 http://yourhost/job.php 

要小心不要讓長時間運行的腳本超載您的服務器。