Linux
Ubuntu 守護程序最佳實踐?
我有一個 RingoJS 網路伺服器(在 Jetty 上執行),它是 Apache 反向代理設置的一部分。
我希望多個 Ringo 程序在後台自主執行,在重新啟動時自動啟動等。基本上,與 Apache 或 Postgresql 守護程序相同。
我調查了後台執行的程序(通過 & 或 bg)、nohup 以及使用 screen 來維護多個上下文。我不確定這裡的最佳做法是什麼。
我希望能夠輕鬆辨識(友好名稱)每個正在執行的 RingoJS 程序。(每個應用程序一個)。然後能夠像使用 apachectl 或其他東西一樣輕鬆地啟動和停止它們。我希望程序在重新啟動時自動啟動,並且不受重複 ssh 會話的影響。
Screen 似乎是一個不錯的選擇,但它的案例似乎更多地用於移植 shell 上下文,而不是用於維護長時間執行的系統程序。我可以在後台執行作業,但擔心註銷後的殭屍程序或無法清楚辨識正在執行的應用程序/服務的神秘 PID。
任何人都可以提供一些關於我“應該”做什麼來實現這一結果的指示嗎?
謝謝。
您應該創建一個初始化服務。Ubuntu使用新貴。http://upstart.ubuntu.com/
對於沒有作為守護程序執行的內置方法的應用程序,您可能希望在您創建的 init/upstart 腳本中使用start-stop-daemon命令來啟動應用程序。您可以使用 start-stop-daemon 在後台啟動某些東西,它可以將 pid 記錄到文件系統,以便在時間到來時停止程序。
只需在 /etc/init.d/ 中查看大量範例,特別是在 /etc/init/skeleton 中查看模板。許多現有的啟動腳本使用 start-stop-daemon。包括 ssh、ntp、rsync 等等。