nginx.service失败,因为控制进程退出 [英] nginx.service failed because the control process exited
问题描述
nginx.service失败,因为控制进程退出
$ systemctl status nginx.service
nginx.service - Startup script for nginx service
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Tue 2016-03-08 13:23:35 GMT; 2min 20s ago
Mar 08 13:23:33 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ------------ f...e)
Mar 08 13:23:33 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:34 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:34 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:35 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:35 .startdedicated.com nginx[8315]: nginx: [emerg] still could not bind()
Mar 08 13:23:35 startdedicated.com systemd[1]: nginx.service: control process exited, code=...=1
Mar 08 13:23:35 startdedicated.com systemd[1]: Failed to start Startup script for nginx service.
Mar 08 13:23:35 startdedicated.com systemd[1]: Unit nginx.service entered failed state.
Mar 08 13:23:35 startdedicated.com systemd[1]: nginx.service failed.
推荐答案
尝试运行以下两个命令:
sudo fuser -k 80/tcp
sudo fuser -k 443/tcp
然后执行
sudo service nginx restart
如果有效,您的主机提供商可能会在全新安装期间默认在您的服务器上安装Apache,因此请继续阅读以获取更持久的修复程序。如果不起作用,请继续阅读以确定问题。
运行nginx -t
,如果没有返回任何内容,我将验证Nginx错误日志。默认情况下,它应该位于/var/log/nginx/error.log
。
您可以使用任何文本编辑器打开它:
sudo nano /var/log/nginx/error.log
您能在那里找到可疑的东西吗?
您可以检查的第二个日志如下
sudo nano /var/log/syslog
我遇到这个问题是因为我的主机提供商在全新安装期间自动安装Apache。它阻止了端口80。
当我执行sudo nano /var/log/nginx/error.log
时,错误日志如下:
2018/08/04 06:17:33 [emerg] 634#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/08/04 06:17:33 [emerg] 634#0: bind() to [::]:80 failed (98: Address already in use)
2018/08/04 06:17:33 [emerg] 634#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
上面的错误说明它无法将nginx绑定到端口80,因为该端口已在使用中。
若要解决此问题,您需要运行以下命令:
yum install net-tools
sudo netstat -tulpn
当您执行上面的命令时,您将得到如下内容:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1762/httpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1224/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1528/sendmail:acce
tcp6 0 0 :::22 :::* LISTEN 1224/sshd
您可以看到端口80被httpd(Apache)阻塞。如果您使用的是SSL,则该端口也可能是端口443。
获取使用端口80或443的进程的PID。并发送KILL命令更改<PID>
值:
sudo kill -2 <PID>
注意:在我的示例中,Apache的PID值是1762
,因此我将执行sudo kill -2 1762
您也可以执行以下命令:
sudo fuser -k 80/tcp
sudo fuser -k 443/tcp
现在端口80或443已清除,您可以通过运行以下命令来启动nginx:
sudo service nginx restart
yum remove httpd httpd-devel httpd-manual httpd-tools mod_auth_kerb mod_auth_mysql mod_auth_pgsql mod_authz_ldap mod_dav_svn mod_dnssd mod_nss mod_perl mod_revocator mod_ssl mod_wsgi
这篇关于nginx.service失败,因为控制进程退出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!