2013-10-20 156 views
0

標題中的「根據命令」部分是必不可少的。我知道如何設置一個cron作業來按照預先確定的時間表運行一個PHP文件。我需要的是類似的性質,但我認爲它需要不同的技術解決方案。根據命令每5分鐘運行PHP腳本2小時

我有一個管理員部分,當我的一個管理員登錄時,他們應該可以單擊一個按鈕,該按鈕將在接下來的2個小時內每5分鐘執行一次PHP腳本。

現在該按鈕存在,它調用一個Javascript函數,它將AJAX請求發送到相應的PHP文件。如果文件中的PHP函數可以被告知每5分鐘從該時刻開始運行直到2小時過去,那麼這會讓我們的生活變得更加輕鬆。

我知道類似的東西可以通過讓Javascript每5分鐘重複請求來完成客戶端。但是,這並不能幫助我很多。管理員需要能夠離開該站點,用不同參數向同一文件發送新請求,而不中斷重複執行PHP腳本。

所以,我需要某種服務器端解決方案。這甚至有可能嗎?如果是這樣,我該怎麼辦?

我可以共享客戶端代碼,但我認爲它並不重要 - 客戶端是標準的AJAX調用;在服務器端,它只是這個:

$par=$_GET['par']; //parameter received from AJAX 

someFunction($par); //I need to modify the code so this function (please note there's a parameter) would run every 5 minutes for the next 2 hours 
+0

請參閱下面的@popnoodles回答,我也會做類似的事情。 –

回答

4

JavaScript的解決方案將需要管理員需要點擊按鈕,然後離開該頁面打開接下來的2個小時,這是遠離理想。我認爲這就是爲什麼你不想要這個。

這是一個方法

  • 當您的管理員點擊該按鈕存儲日期和時間在數據庫或文件
  • 有一個cron作業運行每5分鐘無論
  • 的第一件事的cron工作確實是檢查是否存儲日期時間> =現在 - 2小時
  • 如果不是,因爲admin發表於2小時過去了最後按下按鈕,死亡()

如果另一個管理員單擊該按鈕,只需使用新值覆蓋該作業的該日期時間。然後,自上次點擊以來,作業每隔5分鐘運行2小時。

+0

這似乎是一個簡單而有效的解決方案。由於我也需要每個調用的參數,所以我會將它存儲在數據庫中。您是否看到在重疊的時間間隔內使用多個不同參數進行操作的潛在問題?在這種情況下,cron會通過數據庫,檢查每一行並調用存儲日期> = now - 2小時的所有行的函數。 – jovan

+0

是的,這就是爲什麼我想避免客戶端解決方案的原因,因爲我這樣做的最大原因是將管理員從整個頁面打開時解放出來。 – jovan

+0

「你是否看到在重疊的時間間隔內用幾個不同的參數來做這個問題的任何潛在問題」不,只存儲該作業的一個日期時間。如果另一個管理員點擊該按鈕,它會再次更新,並且自最後一次點擊以來始終運行2個小時。除非你指不同的管理員運行不同的工作。每個作業只需要一個日期時間。 – Popnoodles

0

使用at shell命令你的PHP內部,它可以調用本身。然後使用PHP來管理它被叫或設置他們一次多少次