Linux
Linux 伺服器上的多個幾乎相同的程序
在同一 Linux 伺服器上執行多個幾乎相同的 Java 程序的最佳方法是什麼?
環境說明:
我們正在執行一組提供計算網格的 Java 程序。程序之間的唯一區別是標識節點名稱的命令行參數。就像是:
(過程一) Java -DNodeNumber=1 CalculationNode
(過程2) Java -DNodeNumber=2 CalculationNode
(過程3) Java -DNodeNumber=3 CalculationNode
(過程4) Java -DNodeNumber=4 CalculationNode
啟動每個程序的腳本相對簡單,但並非微不足道,因為需要大約 15 個其他參數 - 它們對所有程序都是相同的
如果使用 SAME NodeNumber 參數失敗,我需要能夠重新啟動程序。換句話說 - 如果節點 3 失敗,我需要將它作為節點 3 重新啟動。
我認為如果一個過程失敗了,你需要修復它才能不再失敗。
要做到你所期望的,這樣的事情就足夠了(未經測試,使用風險自負):
#!/bin/bash for i in $(seq 1 4) do ( echo "Starting node $i..." while ! java -DNodeNumber=$i CalculationNode do sleep 1 echo "Restarting node $i..." done ) & done wait
每個程序都必須以退出程式碼零結束才能中斷循環。否則,它將由腳本重新啟動。
Juliano 的解決方案可能適用於簡單的情況,但並不能涵蓋所有情況。例如,如果錯誤處理程式碼中存在錯誤,即使發生錯誤,您的程序之一也可能以退出狀態 0 退出。或者它可能會死鎖或陷入某種其他類型的無限循環而沒有做任何有用的事情。
因此,如果您想要更高級的解決方案,請嘗試Nagios。它允許您為特殊監控任務編寫外掛。