2009-08-28 77 views
3

我的情況如下:我們有一個外部提供者,它將在本週的特定時間每30秒將XML文件推送到我們的服務器。這段時間每週都會有所不同。因此,我想給我的用戶提供一個我們網站管理端的界面,他們可以「按下按鈕」並觸發數據捕獲。 (並以同樣的方式能夠關閉該作業)使用PHP添加/刪除cron作業

我已經計劃使用PHP來完成此操作。我假設我需要從腳本運行一些系統命令來安排和刪除cron作業。

我的問題是:這是做這件事的最好方法嗎?在安排和刪除cron作業從php中是否有任何危險?我在創建這個時需要記住哪些事項?

此外,任何指針/提示如何實現這一點是值得歡迎的。提前致謝。

+0

考慮到您的建議,我將設置cron作業連續運行的位置,並檢查目錄中的更新文件。這似乎是最簡單和最有效的解決方案。感謝您的幫助 – Anthony 2009-08-28 17:49:45

回答

4

我會建議只保留尋找上傳的XML文件,每分鐘都在運行的cron作業。檢查目錄中是否存在任何文件不是一個足夠昂貴的操作,您需要使一個涉及的管理界面在不需要時將其關閉。

+0

我應該提出這個問題的一部分......我想我需要每30秒左右運行一次這個工作來獲得最新的數據。可能每隔30秒解析一個合理大小的xml文件是否會對性能產生負面影響?或者這是一個有爭議的問題? – Anthony 2009-08-28 14:08:57

+0

如果它「合理大小」,我懷疑你會傷害任何東西。但請注意,「cron」每分鐘最好的分辨率是一次;如果您必須每30秒處理一次,則需要讓cron作業休眠30秒並進行第二次檢查,或者只需創建一個守護程序。 – chaos 2009-08-28 14:12:09

+0

啊,我忘了cron只會下到分鐘,而不是第二個。謝謝您的幫助。 – Anthony 2009-08-28 14:17:50

1

您可以閱讀crontab文件並添加/取消註釋或註釋掉運行腳本的行。這會讓我感到緊張,因爲錯誤會導致你的crontab被破壞,影響其他工作。

您也可以讓cron作業繼續運行。讓你的on/off開關在其他文件或數據庫中設置一個值,然後讓cronned腳本檢查該值以確定它是否應該實際執行任何操作或只是退出。

或者,只需讓cron作業始終運行,以便用戶始終擁有新的數據並且不必記住打開文件讀取。

或者,設置cron作業,使其只在一週的特定時間運行。

2

我建議你不要使用PHP添加或刪除cron作業。您應該編寫一個(固定的)cron作業,而不是使用PHP配置。它可以檢查一些配置文件或數據庫,每次它運行實際的作業,你排隊。

1

我以前做過這種事情。我不建議在crontab級別打開/關閉cron。

相反,離開運行所有的時間cron的,但PHP腳本應該是這樣的:

if(ScriptIsEnabled()) 
{ 
    DoWork() 
} 

ScriptIsEnabled()應該尋找一個標誌在配置文件,數據庫,內存緩存,或者無論你有多想與腳本溝通。我更喜歡memcache(最小開銷 - 只是設置一個值)在數據庫上。

然後,您可以使用開/關按鈕來控制此網頁。

+1

+1這是一個非常好的和最可靠的方法,特別是如果你不能直接操作crontab是因爲安全特權。 – 2009-09-20 18:04:43

+0

+1是的,簡單而聰明 – dino 2011-10-15 16:11:00