Nginx
runit 和 nginx
我正在開發一個主要啟動系統是 runit 的系統。
不幸的是,runit 要求它執行的任何應用程序都在前台執行,如下所示:
#!/bin/bash exec sshd -D
鑑於 nginx 沒有提供在前台執行它的方法,我怎樣才能讓 runit 仍然管理 nginx 並能夠使用 runit 的
sv
命令停止、啟動和重新啟動它?
您可以使用選項
daemon off
:exec /usr/sbin/nginx -c /etc/nginx/nginx.conf -g "daemon off;"
來自nginx 維基:
您可以使用 runit / daemontools 在生產模式下安全地使用 daemon off,但是您不能進行正常升級。master_process off 永遠不應該在生產中使用。
當您使用
runit
to controlnginx
時,它成為nginx
主程序的父程序。但是如果您嘗試進行線上升級,nginx
主程序將分叉並執行新的二進製文件。創建了一個新的主程序,但由於舊的主程序仍然存在(因為它是由 控制的
runit
),新主程序的父程序將是 init 程序,因為runit
它沒有啟動它,無法控制新的主主程序。