解决 NGINX 启动报错 PID 文件不可读
后知后觉 现有 2 评论

使用 NGINX 官方源安装,启动程序发现 Systemd 中存在报错。

报错

错误如下

● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-08-19 10:16:54 CST; 13min ago
     Docs: http://nginx.org/en/docs/
 Main PID: 1714 (nginx)
   CGroup: /system.slice/nginx.service
           ├─1714 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
           └─1715 nginx: worker process

Aug 19 10:16:53 domain.com systemd[1]: Stopped nginx - high performance web server.
Aug 19 10:16:53 domain.com systemd[1]: Starting nginx - high performance web server...
Aug 19 10:16:54 domain.com systemd[1]: PID file /var/run/nginx.pid not readable (yet?) after start.
Aug 19 10:16:54 domain.com systemd[1]: Started nginx - high performance web server.

原因

这是因为 NGX 启动时 PID 文件并未产生,导致文件无法读取,因此产生如下报错

systemd[1]: PID file /var/run/nginx.pid not readable (yet?) after start.

解决

知道问题如何产生,自然就有了解决办法。修改守护单元配置文件即可。

优雅解决

执行命令修改启动单元

sudo systemctl edit nginx.service

打开编辑器后可以看到以下内容:

### Editing /etc/systemd/system/nginx.service.d/override.conf
### Anything between here and the comment below will become the new contents of the file



### Lines below this comment will be discarded

在这两段文字中间的空行中加入以下代码:

[Service]
ExecStartPost=/bin/sleep 0.1

保存退出后重启服务即可。

普通解决

在守护单元中添加如下语句即可,作用是在执行可执行文件前等待 0.1s。

ExecStartPost=/bin/sleep 0.1
提示:编辑 /usr/lib/systemd/system/nginx.service 即可。可在 systemctl status nginx 命令中可看到守护单元文件的位置。

修改后需要重载单元,否则会产生如下警告。

Warning: nginx.service changed on disk. Run 'systemctl daemon-reload' to reload units.
sudo systemctl daemon-reload

即可修复此问题。


附录

参考链接

本文撰写于一年前,如出现图片失效或有任何问题,请在下方留言。博主看到后将及时修正,谢谢!
禁用 / 当前已拒绝评论,仅可查看「历史评论」。
  1. avatarImg 小笼包

    非常感谢,很多都是转来转去的,这个成功解决了,

    Chrome 80.0 Windows 10
    IP 属地 未知
    1. avatarImg
      @小笼包

      没办法的事情,我也想不通他们把错的教程转来转去有什么用。

      Firefox 74.0 Windows 10
      IP 属地 未知