我在 Ubuntu 18.10 上,在 vmware 下运行,无法启动 nginx 服务 - 我收到错误“nginx.service:无法打开 PID 文件 /run/nginx”。
我已经使用 Passenger 从源代码编译了 nginx。在一台机器上运行正常,但在我的虚拟机中尝试时我无法启动 nginx 服务。它给出了上述错误,因为它无法打开 PID 文件(或创建它?)。我已经完成了 systemctl enable & start 并且它挂起。
我使用了 /etc/sytemd/system/nginx.service 脚本,如下所示:
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/opt/nginx/sbin/nginx -t
ExecStart=/opt/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
我尝试用 /var/run 替换 /run ,但它给出了相同的错误。
nginx.conf 中没有引用 PID(我认为不需要?)。
任何人都可以给我任何关于如何排除故障或修复此问题的指示吗?
小智 8
只是偶然发现你的问题并想留下一个简短的答案:
Systemd 本身不会创建 PID 文件。它期望可执行文件来创建它(通常在 文件夹中/run,或者特别对于 Ubuntu 在该/var/run文件夹中)。Systemd 仅检查它是否是在服务启动后创建的。终止服务时还会删除 PID 文件。参考
Nginx 服务器作为 fork 进程确实支持创建 PID 文件。要更改其位置,您可以使用pid其nginx.conf文件中的指令,您可以在/etc/nginx标准包的文件夹中找到该指令。该pid指令默认为logs/nginx.pid. 参考
手动创建 Nginx 服务时,您需要确保 Systemdnginx.service文件中的位置和 Nginxnginx.conf配置文件中的位置匹配。
我有一个关于如何解决这个问题的答案,但我会暂时保留它,以便有人可以评论为什么会这样。
我更改了 PID 行,以便将 PID 文件写入已安装的 nginx 文件夹的日志文件夹 (/opt/nginx/logs)。在其他地方,它会拒绝写入 PID 文件!
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/opt/nginx/logs/nginx.pid
ExecStartPre=/opt/nginx/sbin/nginx -t
ExecStart=/opt/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
我不知道这种行为的原因是什么,如果一些 Ubuntu Linux 专家能告诉我为什么它不会在其他地方写入 PID,包括正常运行位置 /run 和 /var/run (甚至是tmp) 例如,这在程序的所有引用的启动脚本中都是正常的。我认为只有从源代码创建时才会发生这种情况。
| 归档时间: |
|
| 查看次数: |
35880 次 |
| 最近记录: |