# /lib/systemd/system/nginx.service # Stop dance for nginx # ======================= # # ExecStop sends SIGSTOP (graceful stop) to the nginx process. # If, after 5s (--retry QUIT/5) nginx is still running, systemd takes control # and sends SIGTERM (fast shutdown) to the main process. # After another 5s (TimeoutStopSec=5), and if nginx is alive, systemd sends # SIGKILL to all the remaining processes in the process group (KillMode=mixed). # # nginx signals reference doc: # http://nginx.org/en/docs/control.html #
我使用的是debian系统,所以nginx.service文件放在了/etc/systemd/system/目录下面,nginx.service文件内容如下:
[Unit]
Description=A high performance web server and a reverse proxy server Documentation=man:nginx(8)
After=network.target
[Service]
Type=forking
Restart=on-failure
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid TimeoutStopSec=5
KillMode=mixed
RemainAfterExit=no
[Install]
WantedBy=multi-user.target
其中有几个选项很重要
- Type=forking,
Type的值有simple,oneshot,exec,对于nginx这种多进程模型,必须是forking,否则worker进程在启动时就起不来。
- KillMode=mixed
KillMode的值有process,control-group,mixed,process只是把主进程给kill,不推荐;control-group,只要一个被kill,所有在control group的都被kill。mixed,给主进程发送SIGTERM信号,给其它进程发生SIGKILL信号。nginx需要用mixed
- Restart
这个选项就指定了什么情况下nginx进程被拉起,一般是on-failure
- Exec系列
是service 命令对应执行的具体命令。
还有一些对于nginx不能配置的选项
GuessMainPID=no
参考资料
https://www.freedesktop.org/software/systemd/man/systemd.service.html
https://www.freedesktop.org/software/systemd/man/systemd.kill.html#