Can’t open PID file /var/run/nginx.pid (yet?) after start: No such file or directory

使用 NGINX 官方源安装,启动程序发现 Systemd 中存在报错:Can't open PID file /var/run/nginx.pid (yet?) after start: No such file or directory

[root@runwu-restful nginx]# systemctl status nginx
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: failed (Result: timeout) since Fri 2022-11-25 16:03:57 CST; 10min ago
     Docs: http://nginx.org/en/docs/
  Process: 30134 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)

Nov 25 16:02:27 runwu-restful systemd[1]: Starting nginx - high performance web server...
Nov 25 16:02:27 runwu-restful nginx[30134]: nginx: [warn] 65535 worker_connections exceed open file resource limit: 1024
Nov 25 16:02:27 runwu-restful systemd[1]: Can't open PID file /var/run/nginx.pid (yet?) after start: No such file or directory
Nov 25 16:03:57 runwu-restful systemd[1]: nginx.service start operation timed out. Terminating.
Nov 25 16:03:57 runwu-restful systemd[1]: Failed to start nginx - high performance web server.
Nov 25 16:03:57 runwu-restful systemd[1]: Unit nginx.service entered failed state.
Nov 25 16:03:57 runwu-restful systemd[1]: nginx.service failed.

原因是Nginx 启动时 PID 文件并未生成,导致文件无法读取

知道问题如何产生,自然就有了解决办法。在 /usr/lib/systemd/system/nginx.service 中添加如下语句即可,作用是在执行可执行文件前等待 0.1s 。

ExecStartPost=/bin/sleep 0.1

[root@runwu-restful nginx]# cat /usr/lib/systemd/system/nginx.service 
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/data/var/run/nginx.pid
ExecStartPost=/bin/sleep 0.1
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /data/var/run/nginx.pid)"
ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /data/var/run/nginx.pid)"

[Install]
WantedBy=multi-user.target

顺便我把pid文件的位置放到了 /data/var/run/nginx.pid
此位置不仅要在 nginx.conf中修改还要在nginx.service中修改,不然在使用systemctl start nginx 的时候会报错 因为systemctl首先读取的是nginx.service文件 所以两个位置都要改 如果不改的话只能用 /usr/sbin/nginx -c /etc/nginx/nginx.conf 启动

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容