nginx.service: Failed to parse PID出现的原因分析和解决方法
112 人阅读 | 时间:2023年04月25日 08:57
阿里云服务器 | 腾讯云服务器 | VPS2EZ:老牌低调VPS | ZJI:香港日本美国独服 |
LOCVPS服务周到 | HostKvm低调KVM VPS | 傲游主机:优质VPS | 80VPS:老牌VPS主机 |
搬瓦工:CN2 GIA线路 | CloudCone:性价比高 | JustMySocks科学上网 | RackNerd:超级便宜 |
JustMySocks科学上网 | 好用的宝塔面板 | 购买搬瓦工VPS | 恒创:香港CN2服务器 |
很久以前用Apache,后来偷懒就用Nginx了,毕竟轻量也够用。但是在某些机子(大概率和性能有关)上使用systemctl status nginx
查看Nginx状态的时候,会出现以下报错内容:
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-reload
和systemctl restart nginx.service
之后,就会发现一切正常了。
[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
评论专区