Service 失败,因为控制进程退出

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.
393649 次浏览

尝试在 nginx.conf 中设置一个用户,也许这就是他无法启动服务的原因:

User www-data;

尝试使用命令进行调试:

$ service nginx configtest

其输出类似于:

Testing nginx configuration: nginx: [emerg] unknown directive "stub_status" in /etc/nginx/sites-enabled/nginx_status:11
nginx: configuration file /etc/nginx/nginx.conf test failed

修正那些警告

然后重新启动 nginx

可以通过运行以下命令来检查 Nginx 配置文件的语法:

nginx -t -c /etc/nginx/nginx.conf
  • 使用这些命令来

    1. Sudo 服务 apache2站

    2. Sudo apt-get purge apache2

    3. Sudo apt-get 更新

    4. Sudo apt-get install nginx

    5. 重新启动 sudo 服务

当某个程序无法绑定到某个端口时,其中5% 是因为没有由 root (粘性 suid 位,sudo)启动,94% 是因为另一个应用程序已经绑定到该端口。

确保 nginx 真正关闭,并且不要试图意外地启动它两次。

确保没有运行使用端口80的 Apache 或其他服务。

利用 netstat -a | grep tcp了解更多信息。

我在使用 Vesta 时遇到了同样的问题,它在 Apache 中使用 nginx。问题是,在应用了所有更新之后,Apache 开始监听443的 https。解决方案只是注释掉 ports.conf 中的443个内容。这是因为 nginx 也使用这个端口。

我在 NGINX 1.13.8中使用 RHEL 7.4,如果我在 sudo 中使用 RHEL 7.4,它也能正常工作。好的:

sudo systemctl status nginx.service

只要确保想要使用 nginx.service的任何人都有对它的执行权限。

$ ps ax | grep nginx<br>
$ kill -9 PIDs
$ service nginx start



或者放慢 /etc/nginx/sites-available/default

位置/{
首先尝试将请求作为文件服务,然后 < br > & emsp; & emsp; & emsp; & emsp; & emsp; & emsp; # 作为目录,然后回退到显示404。 < br > & emsp; & emsp; & emsp; & emsp; & emsp; & emsp; & emsp; try _ files $uri $uri $uri/= 404;
}

尝试运行以下两个命令:

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

还建议删除以前阻塞端口80和443的内容。这将避免未来发生任何冲突。由于 Apache (httpd)阻塞了我的端口,我通过运行以下命令删除了它:

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

更改端口可能会有所帮助,因为80端口已经在某处使用

vi /etc/nginx/sites-available/default

更改端口:

listen 8080 default_server;
listen [::]:8080 default_server;

然后重新启动 nginx 服务器

nginx -t
service nginx restart

在我的情况下,这是因为 Apache 服务器正在运行的某种方式。所以我停止 apache 然后重新启动 nginx。干得漂亮!

sudo /etc/init.d/apache2 stop
sudo systemctl restart nginx

如果您使用的是 centOS 系统,请检查 df-h

在我的例子中,nginx 无法打开位于 /var/log/nginx/error.log的日志文件

这是因为我删除了 log 目录以释放 root 中的空间(结果证明这是愚蠢的)

然后在 var 中创建一个 log 文件夹,在 log 中创建一个 nginx 文件夹。

然后简单地运行 sudo service nginx start

为了我的案子,我得走了

sudo nginx -t

它将检查 Nginx 配置是否正确,如果不正确,它将显示导致错误的配置。

然后您需要转到 /etc/nginx/sites-available来修复损坏的配置。

在此之后,您可以重新启动 Nginx 没有任何问题。

sudo systemctl restart nginx

问题的原因是这样的,我已经安装了 Apache Web 服务器,并在本地机器上积极监听端口 80

ApacheNginx是两个主要的开源高性能 Web 服务器,能够处理不同的工作负载,以满足现代 Web 需求的需要。然而,Apache主要用作 HTTP 服务器,而 Nginx是高性能异步 Web 服务器和反向代理服务器。

Nginx无法启动是因为 Apache已经在监听端口80作为其默认端口,这也是 Nginx的默认端口。

一个 快速解决办法是通过运行下面的命令停止 Apache服务器

systemctl stop apache2
systemctl status apache2

然后运行下面的命令启动 Nginx服务器

systemctl stop nginx
systemctl status nginx

但是,当我们再次尝试启动 Apache服务器时,同样的问题将再次出现,因为它们都使用端口 80作为默认端口。

我是这样修复它的:

运行下面的命令,在 Nano 编辑器中打开 Nginx 的默认配置文件

sudo nano /etc/nginx/sites-available/default

当文件在 Nano 编辑器中打开时,向下滚动并将默认服务器端口更改为您选择的任何端口。对于我来说,我选择将其更改为端口 85

# Default server configuration
#
server {
listen 85 default_server;
listen [::]:85 default_server;

此外,向下滚动并将虚拟主机端口更改为您选择的任何端口。对于我来说,我还选择将其更改为端口 85

# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
# server {
#        listen 85;
#        listen [::]:85;

然后按键盘上的 拯救出口文件:

Ctrl + S
Ctrl + X

您可能仍然会被提示按键盘上的 为什么来保存更改。

最后,确认您的配置正确并重新启动 Nginx服务器:

sudo nginx -t
sudo systemctl restart nginx

现在可以在浏览器上导航到 localhost:nginx-port(localhost:85)以确认更改。

显示默认的 Nginx 起始页

如果希望在浏览器中导航到 localhost:nginx-port(localhost:85)时显示默认的 Nginx 起始页,请按照以下步骤操作:

通过列出目录的内容来检查目录 /var/www/html/,它是 ApacheNginx的默认 root目录:

cd ~
ls /var/www/html/

您将在目录中列出2个文件:

index.html                # Apache default start page
index.nginx-debian.html   # Nginx default start page

运行以下命令,在 Nano 编辑器中打开 Nginx 的默认配置文件:

cd ~
sudo nano /etc/nginx/sites-available/default

更改根目录中索引文件的顺序:

root /var/www/html;


# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;

为此(将默认的 Nginx 起始页 -index.nginx-debian.html放在紧接 index之后的第二个位置) :

root /var/www/html;


# Add index.php to the list if you are using PHP
index index.nginx-debian.html index.html index.htm;

然后按键盘上的 拯救出口文件:

Ctrl + S
Ctrl + X

您可能仍然会被提示按键盘上的 为什么来保存更改。

最后,确认您的配置正确并重新启动 Nginx服务器:

sudo nginx -t
sudo systemctl restart nginx

现在可以在浏览器上导航到 localhost:nginx-port(localhost:85)以确认更改。

这对我很有效:

首先,去

Cd/etc/nginx

并在 nginx.conf 中进行更改,并使默认端口从80监听到您选择的任何85或其他内容。

然后使用这个命令绑定 nginx 使用的端口类型:

Semanage PORT-a-t PORT _ TYPE-p tcp 85

其中 PORT _ TYPE 是以下内容之一: http _ cache _ PORT _ t、 http _ PORT _ t、 jboss _ management _ PORT _ t、 jboss _ message _ PORT _ t、 ntop _ PORT _ t、 ppet _ PORT _ t。

然后跑:

Sudo system ctl start nginx; # sudo system ctl status nginx

[您应该看到活动状态] ; # sudo systemctl able nginx

在 VVV-config 中为 VVV 提供新站点时遇到这个问题。如果 yml 语法错误,vagrant up将抛出错误。删除并恢复到旧的配置,运行 vagrant provision有所帮助

2022年1月更新:

最简单的方法是 杀死所有 nginx 进程:

sudo killall nginx

然后:

sudo nginx

或者:

sudo service nginx start

其他一些进程已经在运行并绑定到端口80/443,因此 systemd 无法启动 nginx。这几乎总是因为这个过程是手动启动的,而不是通过 systemd 启动的,或者因为您试图同时启动两个不同的 Web 服务器。

要解决这个问题,请在通过 systemd 重新启动进程之前自行终止该进程。

对我来说,Apache HTTP Server 已经开始运行了,所以杀死它就奏效了!

sudo killall apache2

这招对我很管用

sudo fuser -k 80/tcp


sudo fuser -k 443/tcp

那么

sudo  -H apt-get  purge  nginx-common  nginx-full


sudo  -H apt-get  install  nginx-common  nginx-full




sudo systemctl restart nginx

在我的例子中,我在默认文件中遗漏了一个分号,这就是出现这个错误的原因。

在我的情况下,这是由于我的 /etc/nginx/nginx.conf文件中的语法无效。

确切的错误消息如下。
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

因此,我运行以下命令以获取详细信息。
> systemctl status nginx.service
invalid URL prefix in /etc/nginx/nginx.conf:48
它说 nginx.conf 有一个无效的语法。

我用 这个修好了。

重新安装 nginx 对我来说很有效

卸载 nginx:

sudo apt-get remove nginx nginx-common
sudo apt-get autoremove

安装 nginx:

sudo apt update
sudo apt install nginx

原来我有一个文件下的网站-启用,我忘记了 unlink,但其相应的文件在网站-可用不再存在。如果你有这样一个文件,删除它并运行;

sudo service nginx restart

断开文件使用的链接;

sudo unlink /etc/nginx/sites-enabled/file-name

这是因为您的 Apache 服务器正在运行

尝试使用以下命令停止 Apache 服务器

sudo /etc/init.d/apache2 stop

然后重新启动 nginx 服务器

sudo systemctl restart nginx

我遇到了同样的问题,首先我运行 sudo nginx -t

然后我注意到在我的网站配置文件中有一些问题,然后我导航到 /etc/nginx/sites-available并修复破损的配置。

在此之后,您可以重新启动 Nginx 没有任何问题。

重新启动 nginx

CentOS 的正确答案是 setenforce 0

在我的例子中,apache2是问题所在,它正在运行。

首先,让我们看看 apache2的状态:

sudo service apache2 status

如果它在运行,那么停止它:

sudo systemctl stop apache2.service

然后重启 nginx:

sudo systemctl restart nginx.service

我只需要做这些就可以让 nginx 运行起来。

首先停下你的阿帕奇。 Sudo/etc/init.d/apache2停止 第二次重启你的 Nginx。 重新启动 nginx

我错误地在这个文件的顶部添加了一行。

这可能有点晚了,但是..。 我观察到 AWS 上的新实例已经安装了 Apache2,并且使用了与 Nginx 一样的端口80。我遇到了这个问题。我就是这么解决的。

我首先删除了 apache 服务,然后重新启动了 nginx 服务。

 sudo apt install nginx -y
sudo ufw allow 'Nginx HTTP'
sudo ufw allow OpenSSH
sudo ufw enable
sudo systemctl start nginx
sudo service apache2 stop
sudo apt-get purge apache2 apache2-utils apache2-bin apache2.2-common -y
sudo apt-get autoremove
sudo rm -rf /etc/apache2
sudo systemctl restart nginx