【问题标题】:nginx.service failed because the control process exitednginx.service 失败,因为控制进程退出
【发布时间】:2016-06-22 11:49:45
【问题描述】:

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.

【问题讨论】:

  • 请发布您的 nginx.conf 和:“nginx -t”输出...
  • prntscr.com/acoayr 就是这样。我无法发布代码,所以我不得不截屏。
  • 请发布您的服务器块配置和:“nginx -t”输出...您是否尝试重新启动 nginx? “服务 nginx 重启”
  • nginx -t 输出 nginx: 配置文件/etc/nginx/nginx.conf 语法没问题 nginx: 配置文件/etc/nginx/nginx.conf 测试成功我试过重启,这是什么我得到:falcon170:~# service nginx restart 重新启动 nginx(通过 systemctl):nginx.service 的作业失败,因为控制进程退出并出现错误代码。有关详细信息,请参阅“systemctl status nginx.service”和“journalctl -xe”。 [失败]
  • 查看/var/log/nginx/errors.log。有关于失败的所有信息。

标签: nginx server systemd worker systemctl


【解决方案1】:

2022 年 1 月更新:

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

sudo killall nginx

然后:

sudo nginx

或者:

sudo service nginx start

【讨论】:

    【解决方案2】:

    重新安装 nginx 对我有用

    卸载 nginx:

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

    安装 nginx:

    sudo apt update
    sudo apt install nginx
    

    【讨论】:

      【解决方案3】:

      尝试运行以下两条命令:

      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

      【讨论】:

      • tnx 我只是尝试 'sudo fuser -k 80/tcp' 和 'sudo fuser -k 443/tcp' 和 nginx 为我工作
      • 就我而言,我正式使用 node/expressjs 来处理我的服务器。 Http 设置为在端口 80 上运行,而 https 设置为在端口 443 上运行。我按原样删除了它们,并且 nginx 按预期工作。我猜这个错误意味着另一个服务正在使用端口 8080。
      • 我遇到了最奇怪的问题。当我执行sudo netstat -tulpn 时,我实际上看到了tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 24873/nginx: master ,但是当我尝试启动服务或查看它的状态时,我得到了这个nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) Bizarre。知道为什么吗?
      【解决方案4】:

      问题的原因是这样的,我已经安装了 Apache 网络服务器,并在我的本地机器上主动监听端口 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
      

      系统可能仍会提示您按键盘上的 Y 以保存更改。

      最后确认你的配置正确,重启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
      

      系统可能仍会提示您按键盘上的 Y 以保存更改。

      最后确认你的配置正确,重启Nginx服务器:

      sudo nginx -t
      sudo systemctl restart nginx
      

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

      【讨论】:

      • 我不知道,但出于某种原因安装了 apache。我没有安装它。它可能是我正在开发的 VPS 附带的,所以我忽略了这个答案并跟随所有其他人,最后尝试了这个,非常感谢。现在,我可以睡觉了。
      【解决方案5】:

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

      vi /etc/nginx/sites-available/default
      

      更改端口:

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

      然后重启nginx服务器

      nginx -t
      service nginx restart
      

      【讨论】:

        【解决方案6】:

        在我的情况下,这是由于我的 /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 的语法无效。

        我修复了它指的是this

        【讨论】:

          【解决方案7】:

          就我而言,我错过了默认文件中的分号,这就是出现此错误的原因。

          【讨论】:

            【解决方案8】:

            这对我有用

            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
            

            【讨论】:

              【解决方案9】:

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

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

              对我来说,apache web 服务器已经在运行,所以杀死它就可以了!

              sudo killall apache2
              

              【讨论】:

                【解决方案10】:

                在 vvv-config.yml 中为 VVV 配置新站点时出现此问题,语法错误,vagrant up 会抛出错误。删除并恢复到旧配置,运行vagrant provision 有帮助

                【讨论】:

                  【解决方案11】:

                  这对我有用:

                  首先,去

                  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_messaging_port_t、ntop_port_t、puppet_port_t。

                  然后运行:

                  sudo systemctl 启动 nginx; #sudo systemctl status nginx

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

                  【讨论】:

                    【解决方案12】:

                    就我而言,我需要运行

                    sudo nginx -t
                    

                    它会检查 Nginx 配置是否正确,如果不正确,它会告诉你是哪个配置导致了错误。

                    那你需要去/etc/nginx/sites-available修复损坏的配置。

                    之后,您可以毫无问题地重新启动 Nginx。

                    sudo systemctl restart nginx
                    

                    【讨论】:

                      【解决方案13】:
                      $ ps ax | grep nginx<br>
                      $ kill -9 PIDs
                      $ service nginx start
                      



                      或后退/etc/nginx/sites-available/default

                      位置 / {
                      # 首先尝试将请求作为文件服务,然后
                      # 作为目录,然后回退到显示 404。

                      try_files $uri $uri/ =404;
                      }

                      【讨论】:

                        【解决方案14】:

                        就我而言,nginx 无法打开位于/var/log/nginx/error.log 的日志文件

                        这是因为我删除了日志目录以释放root空间(结果很愚蠢)

                        然后我在 var 中创建了一个日志文件夹,在日志中创建了一个 nginx 文件夹。

                        然后只需运行sudo service nginx start

                        【讨论】:

                          【解决方案15】:

                          如果你是centOS系统,检查df -h

                          【讨论】:

                            【解决方案16】:

                            在我的情况下,这是因为 apache 服务器以某种方式运行。所以我停止apache然后重新启动nginx。像魅力一样工作!

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

                            【讨论】:

                            • 感谢您的回复 :) 它在头痛后救了我。
                            【解决方案17】:

                            我将 RHEL 7.4 与 NGINX 1.13.8 一起使用,如果我对 sudo 执行相同操作,它可以正常工作:

                            sudo systemctl status nginx.service
                            

                            只要确保想要使用nginx.service 的人对其具有执行权限即可。

                            【讨论】:

                              【解决方案18】:

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

                              【讨论】:

                                【解决方案19】:
                                • 使用这些命令来

                                  1. sudo service apache2 停止

                                  2. sudo apt-get purge apache2

                                  3. sudo apt-get 更新

                                  4. sudo apt-get install nginx

                                  5. sudo service nginx 重启

                                【讨论】:

                                • 这对我有用
                                【解决方案20】:

                                当某些东西无法绑定到端口时,它是 5%,因为它不是由 root 启动(粘性 suid 位,sudo)和 94%,因为另一个应用程序已经绑定到该端口。

                                确保 nginx 确实已关闭,不要尝试意外启动两次。

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

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

                                【讨论】:

                                  【解决方案21】:

                                  通过运行检查 Nginx 配置文件的语法可能会派上用场:

                                  nginx -t -c /etc/nginx/nginx.conf
                                  

                                  【讨论】:

                                  • 就我而言,它适用于sudo /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf 或简单的sudo /usr/local/nginx/sbin/nginx -t
                                  • 上面的命令显示了添加到nginx/sites-enabled的配置文件中的错误,一旦这些错误得到解决,所有其他命令都可以正常运行。
                                  【解决方案22】:

                                  尝试用命令调试:

                                  $ 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 配置:失败!
                                  • 我收到The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.
                                  【解决方案23】:

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

                                  User www-data;
                                  

                                  【讨论】:

                                  • 我应该添加一个带有“User=www-data”的新行吗?
                                  • 在你的 nginx.conf 中。printscreen 的第一行是用户 nginx;删除 # 并放入用户 www-data;
                                  • 更新 www-data 到 falcon170
                                  • 还是一样的。我试着寻找“journalctl -xe”,这就是我得到的。 prntscr.com/acp9p5
                                  • httpd 和 nginx 在同一个端口上运行。停止 httpd 和 nginx 可以启动。现在正在寻找解决方案。
                                  猜你喜欢
                                  • 1970-01-01
                                  • 2019-12-31
                                  • 2018-08-10
                                  • 2017-07-20
                                  • 2017-06-14
                                  • 2020-09-17
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2016-04-11
                                  相关资源
                                  最近更新 更多