Nginx 重啓時丟失nginx.pid文件解決方法

一、nginx的停止操作
停止操作是通過向nginx進程發送信號來實現的,具體錯誤信息如下:
[[email protected] ~]# /usr/local/nginx/sbin/nginx -s reload
nginx: [error] open() “/usr/local/nginx/logs/nginx.pid” failed (2: No such file or directory)
步驟1:
查詢nginx主進程號,代碼如下:
ps -ef | grep nginx
在進程列表裏 面找master進程,它的編號就是主進程號了。

步驟2:
發送信號,從容停止Nginx:
kill -QUIT 主進程號
快速停止Nginx:
kill -TERM 主進程號
強制停止Nginx,代碼如下:
pkill -9 nginx
另外, 若在nginx.conf配置了pid文件存放路徑則該文件存放的就是Nginx主進程號,如果沒指定則放在nginx的logs目錄下。有了pid文件,就不用先查詢Nginx的主進程號,而直接向Nginx發送信號了,命令代碼如下:
kill -信號類型 ‘/usr/nginx/logs/nginx.pid’

二、nginx的平滑重啓
如果更改了配置可以向Nginx發送信號,平滑重啓。
平滑重啓命令代碼如下:
kill -HUP 住進稱號或進程號文件路徑
或使用
/usr/nginx/sbin/nginx -s reload
注意,修改了配置文件後最好先檢查一下修改過的配置文件是否正確,以免重啓後Nginx出現錯誤影響服務器穩定運行。判斷Nginx配置是否正確命令代碼如下:
nginx -t -c /usr/nginx/conf/nginx.conf
或者
/usr/nginx/sbin/nginx -t

三、nginx的平滑升級
如果服務器正在運行的Nginx要進行升級、添加或刪除模塊時,我們需 要停掉服務器並做相應修改,這樣服務器就要在一段時間內停止服務,Nginx可以在不停機的情況下進行各種升級動作而不影響服務器運行。
步驟1:
若升級Nginx程序,先用新程序替換舊程序文件,編譯安裝的話新程序直接編譯到Nginx安裝目錄中。

步驟2:執行命令
kill -USR2 舊版程序的主進程號或進程文件名
此時舊的Nginx主進程將會把自己的進程文件改名爲.oldbin,然後執行新版 Nginx。新舊Nginx會同市運行,共同處理請求。
這時要逐步停止舊版 Nginx,輸入命令:
kill -WINCH 舊版主進程號
慢慢舊的工作進程就都會隨着任務執行完畢而退出,新版的Nginx的工作進程會逐漸取代舊版 工作進程。
可以決定使用新版還是恢復到舊版。

四、不重載配置啓動新/舊工作進程
kill -HUP 舊/新版主進程號
從容關閉舊/新進程
kill -QUIT 舊/新主進程號
如果此時報錯,提示還有進程沒有結束就用下面命令先關閉舊/新工作進程,再關閉主進程號:
kill -TERM 舊/新工作進程號
注意在阿里雲服務器上,進程性的 nginx -s stop後再次啓動nginx -s reload ,總是會報錯誤
nginx: [error] open() “/alidata/server/nginx/logs/nginx.pid” failed (2: No such file or directory)
原因:nginx進程殺死後pid丟失了,下一次再開啓nginx -s reload時無法啓動,重裝可以解決問題。也可以參考一下英文的解釋:
issued a nginx -s stop and after that I got this error when trying to reload it.
[error]: invalid PID number “” in “/var/run/nginx.pid”
That /var/run/nginx/pid file is empty atm.
What do I need to do to fix it?
nginx -s reload is only used to tell a running nginx process to reload its config. After a stop,
you don’t have a running nginx process to send a signal to.
Just run nginx (possibly with a -c /path/to/config/file)

使用方法,代碼如下:
nginx -c /path/to/config/file

Linux系統執行命令如下:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
來源:http://blog.yoodb.com/yoodb/article/detail/1249

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章