我有幾個24/7全天候運行的java應用程序。我想編寫另一個Java應用程序,它檢查是否有任何應用程序崩潰。如果某個應用程序崩潰了,我想重新啓動它。有沒有解決方案?Java - 檢查是否有另一個Java應用程序正在運行
回答
什麼我能想到的是,當這個例外是,您可以定義在這些24/7運行的程序一個新的自定義異常,添加例外,在那裏你可以認爲發生碰撞塊,然後調用另一個Java應用程序的一些方法由碰撞調用。
...就像'main'一樣。 – DerMike 2012-04-24 07:05:39
我看到一些方法,但應該有更好的方式來做到這一點:
如果你有在你運行的應用程序的控制,你可以讓他們每個人聽一個給定端口的機器上並回復對它的任何請求。然後,您可以簡單地ping該端口以查看應用程序是否正在運行。
如果您自行啓動應用程序,你可以存儲他們的PID,然後檢查是否與該PID的進程仍然活着。
每個應用程序都可以創建一個文件並定期更新它。然後,您的監控應用程序可以檢查文件是否已更新。如果沒有,那麼應用程序已經死了。
「Pinging a port」工作如果崩潰還會降低偵聽端口的部分。您可能會遇到其他所有事件都已崩潰的情況(例如,掛在競賽狀態),只有港口聽衆高興地迴應乒乓。 – Torben 2012-04-24 10:21:10
您或許可以使用(http://quartz-scheduler.org/)Quartz調度,或java.util.Timer中的API來喚醒的過程recurrently.and檢查。有時候你運行這個過程,我相信你可以得到可以存儲的PID或進程ID。 定期喚醒並調用shell sript來檢查進程是否正在運行。如果沒有,那麼產卵使用調用Runtime.getRuntime()新工藝
如果你可以用一個簡單的解決方案,應用程序必須從應用程序的核心功能更新內外部資源。如果外部資源暫時未更新,則知道應用程序的核心已停止。
如果您使用單獨的線程來更新資源,您的核心功能將崩潰,但線程繼續運行並且您什麼也沒有檢測到。
外部資源可以是文件。在那裏寫下當前的時間戳。如果時間戳沒有更新一段時間,那麼應用程序崩潰。或者,如果您的顯示器位於單獨的計算機上以檢測硬件崩潰(如果顯示器與您的應用程序崩潰,則顯示器將毫無用處),則可以寫入網絡套接字。
您的監視器必須知道Java進程的進程標識符,以便它可以殺死它並在需要時重新啓動它。如果從shell腳本啓動應用程序,則可以將進程標識符寫入文件中。
有一個十億美元的產業生產這種軟件監視器。這不是一項微不足道的任務。
- 1. 檢查程序是否正在運行
- 2. 檢測一個線程是否正在運行java fx
- 3. Java:我如何檢查另一個類文件是否正在運行?
- 4. 檢查應用程序是否正在運行
- 5. 檢查應用程序是否正在運行?
- 6. 黑莓:檢查是否無頭應用程序正在運行
- 7. java測試 - 在另一個linux機器上運行一個java應用程序
- 8. 如何檢查應用程序是否正在運行,否則運行它?
- 9. Java:如何檢查一個java應用程序是否已經在mac上運行過
- 10. Tizen本地服務應用檢查另一個應用程序正在運行
- 11. Java,在前臺運行另一個應用程序
- 12. Android檢查服務是否從另一個應用程序運行
- 13. 是否可以在Flex應用程序中運行Java程序?
- 14. 檢查數據庫是否正在運行使用Java
- 15. 獲取I /從另一個java程序運行Java程序Ø
- 16. 從另一個Java程序運行java程序
- 17. 檢查某個特定應用程序是否在運行iOS?
- 18. 從另一個Java應用程序啓動Java應用程序
- 19. 檢查進程是否正在運行
- 20. 檢查Windows應用程序是否正在運行(而不是進程)
- 21. 如何檢查是否有其他應用程序實例正在運行
- 22. 從另一個Java應用程序運行桌面應用程序
- 23. 如何檢查某個進程是否正在運行 - java on linux
- 24. c#檢查另一臺電腦上是否有其他應用程序實例正在運行
- 25. 如何檢查是否另一個應用程序最小化?
- 26. 運行Java應用程序
- 27. 從Silverlight OOB應用程序如何檢查進程是否正在運行
- 28. 是否可以在Palm Z22上運行Java ME應用程序?
- 29. Java應用程序在Eclipse中正常運行,但不是.jar
- 30. 每個Java應用程序是否有一個JVM?
這聽起來像是我的一項操作系統任務。你使用哪個系統(-s)? – DerMike 2012-04-24 07:08:21