2012-01-13 200 views
12

我已經安裝了Ubuntu 11.04 i386服務器並安裝了nginx 1.0.11。另外,我正在使用this init.d script,這是我在幾個不同的地方發現的唯一一個。它很好地啓動服務器,但是,在停/復它說Nginx守護進程停止失敗

* Stopping Nginx Server...  [fail] 

當然,守護進程沒有停止,並且在重新啓動時的配置不再被重新裝入。

我該如何修復?

回答

28

它很可能無法殺死進程。

打開位於/etc/??.d/nginx中的nginx腳本,並找到nginx.pid被認爲是的位置。它會像「/var/run/nginx.pid」。

如果pid文件不存在,請打開nginx.conf並查找pid設置。如果它不匹配 - 將conf值設置爲腳本認爲應該在的位置,例如, (任何端口,你正在使用或使用)

sudo fuser -k 80/tcp

或者:

# pid of nginx process 
pid /var/run/nginx.pid; 
+2

對我來說,這是'/運行/ nginx.pid'在nginx.conf中,我用'/ var/run/nginx.pid'取代了它,並且它工作正常。謝謝!我的問題中的 – 2016-02-25 14:06:29

+0

是該路徑的引號 – 2016-05-04 11:38:53

+0

謝謝 - 我看到兩個dirs中的pid文件,但將init和nginx.conf更改爲指向'var'dir,而是解決了與停止/重新啓動腳本相同的問題。 – Scott 2018-03-06 22:08:39

5

sudo service nginx restart會給你這樣的事情:

Stopping nginx:           [FAILED] 
Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) 
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) 
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) 
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) 
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) 
nginx: [emerg] still could not bind() 

然後通過他們的口手工殺掉該進程,通過他們的ID殺死進程:

ps -ef |grep nginx 
kill <pid> 
1

我曾遇到過類似的問題。

通常我使用apache/apache2。

以下可以幫助你:

sudo nginx -s stop | ps -ef | grep nginx | awk {'print $2'} | xargs sudo kill -9 | sudo service apache2 start 

對於文檔請參考本Github Gist

+0

它爲我工作。感謝分享。 – 2016-05-11 04:23:35

3

試試這個命令:

sudo fuser -k 80/tcp