我正在运行 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 nginx
nginx 正在运行。使用以下命令检查sudo ss -lnp | grep nginx
nginx 进程已绑定到端口 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 命令正常启动和停止。