官网:Controlling nginx
翻译部分:Controlling nginx
开始!
nginx can be controlled with signals.
nginx可以被信号控制。
例如: ./nginx -s reload 中的s就是signal的缩写。
The process ID of the master process is written to the file
/usr/local/nginx/logs/nginx.pid
by default.
主进程的进程ID默认被写到 /usr/local/nginx/logs/nginx.pid
文件中。
This name may be changed at configuration time, or in
nginx.conf
using the pid directive.
这个名称可以在配置时更改,也可以在nginx.conf文件中用pid命令修改。
当启动、重启、关闭nginx会读写nginx.pid
文件。
如果nginx.conf没有指定pid命令,则读的是默认文件: /usr/local/nginx/logs/nginx.pid
如果nginx.conf文件中有指定pid命令,则启动、重启和关闭时读写的则是pid命令指定的文件。
先来看下nginx目录下默认有的文件:
我把pid的默认的logs改为log:
如果是pid指定的是相对路径,nginx默认从/usr/local/nginx目录下查找文件?
(1)重启:
可以看到读取的路径变成了/usr/local/nginx/log/nginx.pid
并且当前还没有log文件夹,所以报错了,重启失败。
(2)手动创建log目录:
并在log目录下添加空的nginx.pid文件:
(3)再次重启:
因为文件里没有指定主进程id,报错了,重启失败。
(4)关闭nginx试试:
跟reload是一样的报错。
(5)随便在log/nginx.pid文件中写入123,再关闭:
提示没有pid为123的进程。
(6)查看当前的进程信息:
ps axw -o pid,ppid,user,%cpu,vsz,wchan,command | egrep '(nginx|PID)'
得到主进程id为7617.
(7)修改log/nginx.pid为7617,再关闭nginx:
成功关闭nginx。
(8)查看进程信息:
没有看到主进程信息和worker进程信息了,成功!
(9)再查看log目录:
发现刚刚新建的nginx.pid文件也没有了。
(10)关闭后再次启动nginx:
log目录下生成了nginx.pid文件,nginx.pid内容为7733,7733就是nginx主进程的id。
可以看出启动nginx会生成nginx.pid文件,并写入nginx主进程id。
重启nginx会读取nginx.pid文件来获取当前nginx主进程的进程id来重启它。
关闭nginx会读取nginx.pid文件来获取当前nginx主进程的进程id来关闭它,并删掉nginx.pid文件。
The master process supports the following signals:
主进程支持以下信号
TERM, INT fast shutdown QUIT graceful shutdown HUP changing configuration, keeping up with a changed time zone (only for FreeBSD and Linux), starting new worker processes with a new configuration, graceful shutdown of old worker processes USR1 re-opening log files USR2 upgrading an executable file WINCH graceful shutdown of worker processes
Individual worker processes can be controlled with signals as well, though it is not required. The supported signals are:
单个工作进程也可以通过信号进行控制,尽管这不是必需的。支持的信号包括:
TERM, INT fast shutdown QUIT graceful shutdown USR1 re-opening log files WINCH abnormal termination for debugging (requires debug_points to be enabled)