Nginx和runit ....什么是最佳做法

Tam*_*mpa 4 daemon nginx runit

我对确保Nginx始终处于启动状态感到困惑。我对init.d脚本的理解只是启动和停止nginx。它是否正确?然后在文档中说保持daemon = off;

现在,我想使用runit,以下是我的runit运行脚本:

#!/bin/sh
exec /etc/init.d/nginx start
Run Code Online (Sandbox Code Playgroud)

我注意到总是创建一个新的PID。

因此,总而言之:1)我在nginx文件中没有此语句:

daemon = off;
Run Code Online (Sandbox Code Playgroud)

2)我正在使用上面的runit脚本,但是它总是创建一个新的PID。

因此...确保nginx始终运行的最佳实践。

顺便说一下,我正在使用monit,但会运行它来拥有hte守护程序。

作为测试,我确实使用killall -9 nginx杀死了nginx,并且做了ps aux | grep nginx,发现我有新的pid。所以..我还需要runit吗?

00d*_*ani 5

下面的脚本/etc/init.d与sysvinit相关联,sysvinit是一种古老而又不幸的UNIX服务管理方法。请参见,UNIX下的进程形成一棵树:每个进程都有一个父级,即启动它的进程。父级对子级有很多控制权,重要的是,在子级进程死亡时会得到通知。如果您是进程的父进程,则保持进程运行或关闭该进程实际上很简单。

问题在于:sysvinit服务脚本启动服务然后退出,从而使服务保持运行状态。服务的父进程已消失,这使得查找和跟踪服务变得困难-当要求sysvinit脚本停止服务时,它需要使用不可靠的信息来确定应停止哪个进程。

在正确的服务管理方式,如runit和daemontools的使用,服务是由监督的过程,其运行坚持围绕开展售后服务。由于该服务是子进程,因此主管进程会知道它是否正在运行,是否崩溃以及在哪里找到它以发送信号。

因此,在runit脚本中,正确的做法是运行nginx本身,而不是init.d脚本。这很容易做到。但是,默认情况下,nginx使其自身守护进程,这意味着它故意从其父进程中“退出”,并且变得很难跟踪。幸运的是,可以关闭行为,这是daemon off;配置选项的目的。因此,nginx的有效runit脚本如下所示:

#!/bin/sh
exec /usr/sbin/nginx -g "daemon off;"
Run Code Online (Sandbox Code Playgroud)

简短而甜美。runit可以很好地管理这种安排-它将使nginx保持运行,您可以使用进行控制sv。例如,sv hup nginx告诉nginx重新加载其配置。当然,如果nginx崩溃并重新启动,或者如果您故意要求它使用重启,则PID将会更改sv restart nginx,但是runit可以很好地处理。

(顺便说一句,永远永远永远使用kill -9,永远。