2011-08-13 20 views
1

有沒有辦法如何確保某個進程會一直運行?一直在運行的進程

比方說,我需要用它來運行:

php -f myscript.php -param1=value1 

我現在這樣說:

的proccess啓動和PID被寫入到文件(右後myProcess.pid )。 然後我安排了一個cronjob,它定期試圖每5分鐘一次又一次地啓動這個過程。

該過程實際上是一個bash腳本文件,它首先檢查myProcess.pid是否存在,以及是否如果該文件中的PID真的在運行,如果不是,它將啓動它並重寫「myProcess .pid「與新的PID。

有幾個問題與解決方法:

  1. 什麼「的cron檢查」之間的「封鎖」時間?
  2. 這段時間呢?花費CPU時間不夠5分鐘?
  3. 如果文件myProcess.pid已被入侵或剛剛被某人/某物刪除,該怎麼辦?然後,bash腳本再次啓動它,即使它已經在運行。
  4. 如果過程死亡並且確切的PID需要另一個過程會怎麼樣?

有沒有更好的方法存在?

+2

你談論創建一個後臺程序:http://kevin.vanzonneveld.net/techblog/article/create_daemons_in_php/ – 2011-08-13 10:47:51

+0

類似於您當前的解決方案:在您的crontab中使用lockrun,並且每隔一秒左右輪詢一次。如果最大執行時間爲0,您還可以延長cronjob時間,並進入無限循環,並擁有良好的睡眠。如果它被殺死,它仍然會在x秒內被cronjob調用。 – Garuda

回答

4

你需要某種形式的監控應用像

主管是一個客戶機/服務器系統,它允許用戶監視和控制數類UNIX操作系統上的進程。

或者,您可以創建一些守護進程的PHP代碼:

+0

我不喜歡'supervisord'或其詞彙表中提到的任何其他工具,他們無法檢測到,如果孩子是在一個無限循環和恢復(不是我能看到) - 任何想法如果任何現有的工具支持? – nhed