runit 和 nginx

Naf*_*Kay 7 nginx runit

我正在开发一个主要启动系统是 runit 的系统。

不幸的是,runit 要求它运行的任何应用程序都像这样在前台运行:

#!/bin/bash

exec sshd -D
Run Code Online (Sandbox Code Playgroud)

看到 nginx 没有提供在前台运行它的方法,我如何让 runit 仍然管理 nginx 并能够使用 runit 的sv命令停止、启动和重新启动它?

cuo*_*glm 9

您可以使用选项daemon off

exec /usr/sbin/nginx -c /etc/nginx/nginx.conf  -g "daemon off;"
Run Code Online (Sandbox Code Playgroud)

来自nginx 维基

您可以使用 runit / daemontools 在生产模式下安全地使用 daemon off,但是您不能进行优雅的升级。master_process off 不应在生产中使用。

当您使用runitto control 时nginx,它成为nginx主进程的父进程。但是如果您尝试进行在线升级,nginx主进程将分叉并执行新的二进制文件。

创建了一个新的主进程,但由于旧的主进程仍然存在(因为它由 控制runit),新主进程的父进程将是 init 进程,因为runit无法控制新的主进程,因为它没有启动它。