有沒有一種方法可以監視進程,如果它死了,是否可以調用腳本,這又會使進程恢復備份?監視進程
監視進程
回答
我之前寫過一個叫做relight的人。還有更強大的解決方案,但這個很簡單,適用於我。
monit。
謝謝:)看起來它對我來說是完美的。 – 2010-03-01 06:36:03
monit不會爲一段時間內的過程提供圖表/統計數據嗎? – 2013-05-06 04:56:37
只是一個指針。 mmonit附帶AGPL許可證 – madhairsilence 2017-05-22 06:33:32
#!/bin/bash
while true
do
if pgrep myprocess >/dev/null ;then
echo "up"
else
echo "down"
/path/to/myprocess &
fi
sleep 60
done
,或者你可以刪除while循環和睡眠,並把腳本設置爲每分鐘運行
做最簡單的事情cron作業是擁有初始父做監控。 EG,
#!/bin/sh while true; do cmd # When you get here the process has died. start # the loop again and restart it done
這個腳本是容易被殺死,所以你可能要 捕獲信號,但同樣將是你可以寫任何 顯示器也是如此。如果cmd立即終止 ,或者添加一些日誌記錄(在調用cmd之後調用日誌記錄器 ),您可能會想要插入延遲 。沒有必要變得花俏。
如果你使用的是SysV系統(不是Upstart),你可以把這個進程重新生成到inittab。
只需編輯/ etc/inittab文件,並添加這樣一行:
PROC:12345:重生:/路徑/到/過程
有中得到完成任務的方法數:
- 正如其他人所建議的 - 運行腳本來檢查進程是否正在運行,如果沒有運行,請重新啓動進程。要檢查你,如果進程正在運行與否,你可以使用
pgrep <process name> | wc -l
- 使用watch command一定的時間間隔後運行一個腳本來檢查,如果進程正在運行,如果沒有則重新啓動該進程
- 創建一個父過程中,總是會對於子進程,如果子進程崩潰或停止,則會通知父進程,然後重新啓動新進程。
systemd是大多數主要Linux發行版中的高級流程管理器。
使用在簡單的configuration file中指定的command,Supervisor可以啓動,監視和重新啓動意外死亡的進程。
考慮/etc/supervisor/conf.d/forever.conf
以下主管配置文件片段,其顯示的日期和時間每秒:forever
與PID 15474開始
[program:forever]
command=/bin/bash -c 'while true; do echo "Current time is `date`"; sleep 1; done;'
程序:
[email protected]:~/Projects/fire$ sudo supervisorctl status forever
forever RUNNING pid 15474, uptime 0:00:17
[email protected]:~/Projects/fire$ sudo supervisorctl tail forever
Current time is Fri Jul 7 17:11:10 EDT 2017
Current time is Fri Jul 7 17:11:11 EDT 2017
Current time is Fri Jul 7 17:11:12 EDT 2017
Current time is Fri Jul 7 17:11:13 EDT 2017
Current time is Fri Jul 7 17:11:14 EDT 2017
Current time is Fri Jul 7 17:11:15 EDT 2017
Current time is Fri Jul 7 17:11:16 EDT 2017
Current time is Fri Jul 7 17:11:17 EDT 2017
Current time is Fri Jul 7 17:11:18 EDT 2017
Current time is Fri Jul 7 17:11:19 EDT 2017
Current time is Fri Jul 7 17:11:20 EDT 2017
Current time is Fri Jul 7 17:11:21 EDT 2017
Current time is Fri Jul 7 17:11:22 EDT 2017
Current time is Fri Jul 7 17:11:23 EDT 2017
Current time is Fri Jul 7 17:11:24 EDT 2017
Current time is Fri Jul 7 17:11:25 EDT 2017
殺死forever
過程和主管重新啓動它會自動使用新的進程ID 15760:
[email protected]:~/Projects/fire$ sudo kill 15474
[email protected]:~/Projects/fire$ sudo supervisorctl status forever
forever RUNNING pid 15760, uptime 0:00:02
[email protected]:~/Projects/fire$ sudo supervisorctl tail forever
Current time is Fri Jul 7 17:11:21 EDT 2017
Current time is Fri Jul 7 17:11:22 EDT 2017
Current time is Fri Jul 7 17:11:23 EDT 2017
Current time is Fri Jul 7 17:11:24 EDT 2017
Current time is Fri Jul 7 17:11:25 EDT 2017
Current time is Fri Jul 7 17:11:26 EDT 2017
Current time is Fri Jul 7 17:11:27 EDT 2017
Current time is Fri Jul 7 17:11:28 EDT 2017
Current time is Fri Jul 7 17:11:29 EDT 2017
Current time is Fri Jul 7 17:11:30 EDT 2017
Current time is Fri Jul 7 17:11:31 EDT 2017
Current time is Fri Jul 7 17:11:32 EDT 2017
Current time is Fri Jul 7 17:11:33 EDT 2017
Current time is Fri Jul 7 17:11:34 EDT 2017
Current time is Fri Jul 7 17:11:35 EDT 2017
Current time is Fri Jul 7 17:11:36 EDT 2017
歡迎您提供解決方案的鏈接,但請確保您的答案在沒有它的情況下很有用:[在鏈接附近添加上下文](// meta.stackexchange.com/a/8259),以便您的同行用戶擁有一些想法是什麼以及它爲什麼在那裏,然後引用您鏈接到的頁面中最相關的部分,以防目標頁面不可用。 [答案只是一個鏈接可能會被刪除。](// stackoverflow.com/help/deleted-answers) – 2017-07-06 20:25:26
ps,對於自動評論感到抱歉,但它是一個非常簡單的鏈接回答,我不是確定問題可以被關閉(請求鏈接)。 – 2017-07-06 20:26:03
我擴大了我的答案。我現在認爲這是總體上最好的答案之一。然而,即使在最初的形式下,我的回答也不比推薦Monit的內容更少(參見stackoverflow.com/a/2354030/107158)。 – 2017-07-07 21:23:50
- 1. 進程監視CreateProcessNotifyRoutineEx
- 2. NewRelic - 監視進程
- 3. JMX - 監視進程存在
- 4. 不斷監視進程
- 5. PHP監視子進程
- 6. C++進程監視器
- 7. C++ Linux監視進程sigsegv
- 8. .NET進程監視器
- 9. 設計用於監視和重新啓動進程的監視進程
- 10. 監視Rsync進度
- 11. 如何在Mac中監視進程
- 12. 使用STAT狀態監視Linux進程
- 13. 監視已經運行的進程
- 14. 用while(true)循環監視進程
- 15. 在系統中監視進程啓動
- 16. 藥劑進程監視::EXIT VS:DOWN
- 17. 需要監視一個進程
- 18. 使用QT來監視進程?
- 19. 如何監視OS X上的進程?
- 20. 監視進程的啓動和關閉?
- 21. 特定進程的API監視
- 22. 如何監視啓動「dllhost.exe」的進程?
- 23. 監視一個進程(所有內容)
- 24. 如何在Android上監視進程
- 25. 監視器卡住了python進程
- 26. 如何監視C++守護進程?
- 27. Windows Server 2003上的進程監視器
- 28. Java Web應用程序:監視進度
- 29. 如何監視使用c#的進程?
- 30. 設計進程監視器Windows服務
你可能會得到更好的答案在這serverpen.com – Gabe 2010-03-01 05:19:55
https://serverfault.com/questions/637470/monitor-a-process-using-monit-in-ubuntu – quadruplebucky 2017-07-06 20:53:33
而不是把一個問題「擱置爲脫離主題「,爲什麼不把它移動到它所屬的超級用戶或服務器故障? – 2017-07-07 21:26:36