簡體   English   中英

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

還建議刪除以前阻塞端口 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

就我而言,這是因為 apache 服務器以某種方式運行。 所以我停止apache然后重新啟動nginx。 像魅力一樣工作!

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

通過運行以下命令檢查 Nginx 配置文件的語法可能會派上用場:

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

問題的原因是,我已經安裝了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

系統可能仍會提示您按鍵盤上的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 ) 以確認更改。

嘗試使用命令調試:

$ 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

2022 年 1 月更新:

最簡單的方法是殺死所有 nginx 進程

sudo killall nginx

然后:

sudo nginx

或者:

sudo service nginx start

當某些東西無法綁定到端口時,它是 5%,因為它不是由 root 啟動(粘性 suid 位,sudo)和 94%,因為另一個應用程序已經綁定到該端口。

確保 nginx 確實已關閉,並且您不要嘗試意外啟動它兩次。

確保您沒有運行 Apache 或其他使用端口 80 的服務。

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

更改端口可能會有所幫助,因為 80 端口已經在某處使用

vi /etc/nginx/sites-available/default

更改端口:

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

然后重啟nginx服務器

nginx -t
service nginx restart
  • 使用這些命令

    1. sudo 服務 apache2 停止

    2. sudo apt-get purge apache2

    3. sudo apt-get 更新

    4. sudo apt-get 安裝 nginx

    5. sudo 服務 nginx 重啟

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



或設置回/etc/nginx/sites-available/default

地點 / {
# 首先嘗試將請求作為文件服務,然后
# 作為目錄,然后回退到顯示 404。
try_files $uri $uri/ =404;
}

就我而言,我需要運行

sudo nginx -t

它會檢查 Nginx 配置是否正確,如果不正確,它會告訴你是哪個配置導致了錯誤。

然后你需要去/etc/nginx/sites-available修復損壞的配置。

之后,您可以毫無問題地重新啟動 Nginx。

sudo systemctl restart nginx

嘗試在 nginx.conf 中設置一個用戶,也許這就是他無法啟動服務的原因:

User www-data;

就我而言,nginx 無法打開位於/var/log/nginx/error.log的日志文件

這是因為我刪除了日志目錄以釋放 root 中的空間(結果很愚蠢)

然后我在 var 中創建了一個日志文件夾,在日志中創建了一個 nginx 文件夾。

然后只需運行sudo service nginx start

我在使用 Vesta 時遇到了同樣的問題,它使用 nginx 和 apache。 問題是,在應用所有更新后,Apache 開始為 https 監聽 443。 解決方案就是注釋掉ports.conf 中的443 內容。 這是因為 nginx 也使用了這個端口。

其他一些進程已經在運行並綁定到端口 80/443,因此 systemd 無法啟動 nginx。 這幾乎總是因為該進程是手動啟動的,而不是通過 systemd 啟動的,或者因為您試圖同時啟動兩個不同的 Web 服務器。

要解決此問題,請在通過 systemd 重新啟動之前自行終止該進程。

對我來說,apache web 服務器已經在運行,所以殺死它就可以了!

sudo killall apache2

如果你在centOS系統下檢查df -h

這對我有用:

首先,前往

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

這是因為您的 apache 服務器正在運行

嘗試使用此命令停止您的 apache 服務器

sudo /etc/init.d/apache2 stop

然后重啟nginx服務器

sudo systemctl restart nginx

在 vvv-config.yml 中為 VVV 配置新站點時出現此問題,語法錯誤, vagrant up會拋出錯誤。 刪除並恢復到舊配置,運行vagrant provision幫助

這對我有用

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 的語法無效。

我指的是這個修復它。

原來我在 sites-enabled 下有一個文件我忘了unlink ,但它在 sites-available 中的相應文件不再存在。 如果您有這樣的文件,請將其刪除並運行;

sudo service nginx restart

取消鏈接文件使用;

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

重新安裝 nginx 對我有用

卸載 nginx:

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

安裝 nginx:

sudo apt update
sudo apt install nginx

我遇到了同樣的問題,首先我運行了sudo nginx -t

然后我注意到我的站點配置文件中有一些問題,然后我導航到/etc/nginx/sites-available並修復損壞的配置。

之后,您可以毫無問題地重新啟動 Nginx。

sudo systemctl 重啟 nginx

CentOS 上的正確答案是setenforce 0

就我而言,apache2 是問題所在。 它正在運行。

首先,我們來看看apache2的狀態:

sudo service apache2 status

如果它正在運行,則停止它:

sudo systemctl stop apache2.service

然后重啟nginx:

sudo systemctl restart nginx.service

這就是使 nginx 啟動並運行所需的全部工作。

首先停止你的 apache2. sudo /etc/init.d/apache2 stop第二次重啟你的 Nginx。 sudo systemctl 重啟 nginx

我錯誤地在這個文件的頂部添加了一行。 /etc/nginx/sites-enabled/default一旦我修改它就開始工作了。

好吧,這可能有點晚了,但這里開始......我觀察到 AWS 上的新實例已經安裝了 Apache2,並且它使用端口 80,與 Nginx 一樣。 我遇到了這個問題。 這就是我解決它的方法。

我先刪除了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

nginx 在生產服務器、登台服務器和開發服務器上出現故障時自動重啟。 服務器名稱為:

開發階段產品

我修改了“/lib/systemd/system/nginx.service”並在末尾的 [Service] 部分添加了以下行 -> Restart=on-failure

更改我們所做的配置后,我們必須執行命令“ systemctl daemon-reload ”以使自動重啟配置生效。

這應該在它崩潰時重新啟動 Nginx

我將 RHEL 7.4 與 NGINX 1.13.8 一起使用,如果我對 sudo 執行相同操作,它可以正常工作:

sudo systemctl status nginx.service

只要確保想要使用nginx.service的人對其具有執行權限即可。

只寫這個你的工作就完成了

sudo rm /etc/nginx/sites-enabled/default

sudo service nginx restart

systemctl status nginx

快樂學習

就我而言,我錯過了默認文件中的分號,這就是出現此錯誤的原因。

嘗試 :

sudo service nginx restart

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM