2016-07-31 55 views
-1

我開發了一個php腳本,我想連續運行。永久計時工作

例如,腳本run.php執行一系列任務,但我不知道需要多長時間:可能需要30秒,1分鐘,2分鐘或更多時間。

問題是這個腳本不能同時執行。

所以我不能使用cron作業,因爲如果我每分鐘安裝一個cron作業,但腳本運行時間超過1分鐘,我會有bug)。

事實上,我想這將永久執行此cron作業:每次run.php結束時,腳本run.php被重新加載,一次又一次......

我不知道如何解決這個問題。

請幫忙嗎?

謝謝。

+0

[連續運行Linux後臺作業(http://stackoverflow.com/questions/18896893/running-background-job-continuously-in-linux)的可能的複製 – pdexter

+0

@pdexter我相信這個ISN這個問題的重複。 OP明確指出,不會發生'run.sh'的併發執行。您提到的問題的答案並不代表這種情況。 – pah

+0

嗨,是的,它不是重複的。有趣的是,你失去了更多的時間來找到一個重複的問題比真正閱讀我的問題;) – user3392106

回答

1

您已經(至少)兩個選項:

  • run.php代碼,確定它是否已經運行(通過設置是在腳本的開始查了一些外部控制系統)和設置您所描述的crontab作業。 [我推薦這種方法]。

  • 使用類似(while :; do php run.php; done) &的東西運行一次,並將其放入/etc/rc.local以使其在每個系統啓動時運行。我不太喜歡這種方法,但這是一個可能的解決方案。

+0

嗨,謝謝你的回答。對於第一點來說,設置外部控制系統意味着什麼?就像文件/數據庫中的值。我想這樣做,但有一件事我害怕的是:如果我設置一個值:on(腳本正在運行)和off(腳本不運行),我應該更新值在我的結尾文件run.php。但是,如果run.php無法在文件末尾(出於任何原因)發生,則該值不能更新爲off,然後腳本將不會執行。我希望這是明確的 – user3392106

+0

@ user3392106是的,這可能會出現問題。完美的解決方案將授予狀態始終更新。如果你不能這樣做,你仍然可以實現一個看門狗系統,例如,如果狀態沒有更新爲'n'分鐘,那麼你認爲腳本無法更新狀態並且不再運行。這並不完美,如果您不確定腳本可能運行多長時間,則容易引發錯誤......但這是另一種方法。 – pah

+0

好的,謝謝你,我會這樣做的。這裏的想法;我將用臨時值創建一個txt文件。在我的腳本run.php中,我將開始測試txt文件中的值,如果它是空的(或者時間戳<7分鐘),我會在我的真實php腳本之前插入時間戳。在run.php腳本的末尾,我擦除了時間戳(因此文件再次爲空),因爲這意味着文件在最後執行。如果有問題,那麼該文件將在文件中有時間戳。和run.php的下一次運行,這個時間戳將幫助我知道是否有錯誤 – user3392106