使用 systemctl 关闭后 nginx 自动启动

使用 systemctl 关闭后 nginx 自动启动

我正在运行 Linux Mint 19.2 Tina,它应该相当于 Ubuntu 18.04。

当我发出命令 sudosystemctl stop nginx.service时,systemctl start nginx.service我经常收到错误

Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xe" for details.

nginx: [error] open() "/run/nginx.pid" failed (2: No such file or directory)

我无法使用 systemctl 命令重新启动 nginx,但使用以下命令检查ps aux | grep nginxnginx 正在运行。使用以下命令检查sudo ss -lnp | grep nginxnginx 进程已绑定到端口 80 和端口 443。但/run/nginx.pid不存在。

我可以用手动方式终止该进程,sudo kill $PID_OF_MASTER_NGINX_PROCESS但是常规控制命令不起作用。

答案1

我终于注意到了有助于解决这个问题的东西。当我检查使用 systemctl 启动后的输出时ps aux | grep nginx,我看到了类似以下内容...

$ ps aux | grep nginx
root     30369  0.0  0.0 142168  2004 ?        Ss   21:31   0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 30370  0.0  0.1 144464  6840 ?        S    21:31   0:00 nginx: worker process
www-data 30371  0.0  0.1 144464  6840 ?        S    21:31   0:00 nginx: worker process
www-data 30372  0.0  0.1 144464  6840 ?        S    21:31   0:00 nginx: worker process
www-data 30373  0.0  0.1 144464  6840 ?        S    21:31   0:00 nginx: worker process

但是在该过程自动启动后,我看到了以下内容......

$ ps aux | grep nginx
root     29591  0.0  0.1 142732  9440 ?        Ss   21:25   0:00 nginx: master process nginx -c /etc/nginx/nginx.conf
www-data 29616  0.0  0.1 145028  7248 ?        S    21:25   0:00 nginx: worker process
www-data 29617  0.0  0.1 145028  7248 ?        S    21:25   0:00 nginx: worker process
www-data 29618  0.0  0.1 145028  7248 ?        S    21:25   0:00 nginx: worker process
www-data 29619  0.0  0.1 145028  7248 ?        S    21:25   0:00 nginx: worker process

请注意,主进程的命令行选项略有不同。在 systemctl 情况下,命令行选项包含 ,-g daemon on; master_process on;但在其他情况下,它们包含-c /etc/nginx/nginx.conf。两个不同的进程试图控制 nginx。第二个进程会注意到它没有运行并尝试自动启动它。

命令行在-g daemon on; master_process on;systemd 文件中有所体现/lib/systemd/system/nginx.service。另一个命令行在中有所体现/etc/init.d/nginx。我猜测 systemd 和旧的 init 系统都在尝试运行 nginx。

我运行了sudo update-rc.d -f nginx disable从旧 init 系统的所有运行级别目录中删除 nginx 启动脚本的命令。现在 nginx 可以使用 systemctl 命令正常启动和停止。

相关内容