Nginx服务启动PID解析失败问题排查与解决

24 年 1 月 1 日 星期一
274 字
2 分钟

很久以前用Apache,后来偷懒就用Nginx了,毕竟轻量也够用。但是在某些机子(大概率和性能有关)上使用systemctl status nginx查看Nginx状态的时候,会出现以下报错内容:

shell
nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument

此报错的根源在于Nginx和systemd抢夺资源,systemd作为进程守护会读取PIDFile以实现在Nginx停止后删除PIDFile,但是Nginx启动需要时间,systemd在nginx完成启动前就去读取,从而导致了这个报错。
处理方法也很简单,让systemd在执行ExecStart后等待一段时间(比如1秒钟)即可。首先,打开/usr/lib/systemd/system/nginx.service文件,将ExecStartPost=/bin/sleep 1加入到ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'这行下面(具体代码在文末),然后依次执行systemd的重启systemctl daemon-reloadsystemctl restart nginx.service之后,就会发现一切正常了。

shell
[Unit]
Description=A high performance web server and a reverse proxy server
Documentation=man:nginx(8)
After=network.target nss-lookup.target

[Service]
Type=forking
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;'
ExecStartPost=/bin/sleep 1
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

[Install]
WantedBy=multi-user.target

文章标题:Nginx服务启动PID解析失败问题排查与解决

文章作者:Jinx

文章链接:https://blog.mytest.cc/posts/nginx-failed-to-parse-pid-causes-and-solutions[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。