nginx是超級穩定的伺服器,一般不會因為超載問題而需要重啟,重啟的目的一般都是修改配置
檔案後需要載入一下。
最開始的時候,我是用最直接的重啟方式
killall -9 nginx;/data/nginx/sbin/nginx
如果機器比較慢,kill程序時一瞬間殺不完,再執行一次即可。這種重啟方式不是特別安全,如果配置有誤,則會重啟失敗,需要重新修改配置檔案然後再啟動,期間會消耗一點時間。不過對於目前普遍還是不怎麼嚴格的http界而言,這點時間還不至於產生太大損失,只要不是在關鍵時刻搞出來就好。如果希望沿用這種重啟辦法,我提議還是先好好測試吧。
後來我在nginx.net上看到了一種更奇妙的重啟
kill -hup $pid($pid就是nginx master程序的程序號)
我一般這樣用
kill -hup `cat /data/nginx/logs/nginx.pid`
這種方式的好處是實現「平滑重啟」,在ps -aux中可以看到,nginx首先啟動新程序,舊的程序仍然提供服務,在一段時間後,舊的程序服務結束就自動關閉,剩下新程序繼續服務。但是這種方式也是有缺點的,如果配置檔案有誤,或者資源衝突,則重啟失效,但nginx並沒有任何的提示!這就會時常發現改動的配置檔案沒有生效,又比較難找到問題。
所以,最後雜和了一下問題,弄了乙個nginx.sh,這個版本的nginx.sh還是沒有解決kill -hup的資源衝突的問題,但解決了配置檔案的問題。資源衝突的比如80埠被占用、日誌檔案目錄沒有建立這種的,我再想想辦法。
#!/bin/sh
base_dir='/data/'
$nginx/sbin/nginx -t -c $nginx/conf/nginx.conf >& $nginx/logs/nginx.start
info=`cat $nginx/logs/nginx.start`
if [ `echo $info | grep -c "syntax is ok" ` -eq 1 ]; then
if [ `ps aux|grep "nginx"|grep -c "master"` == 1 ]; then
kill -hup `cat $nginx/logs/nginx.pid`
echo "ok"
else
killall -9 nginx
sleep 1
$nginx/sbin/nginx fi
else
echo "######## error: ########"
cat $nginx/logs/nginx.start fi
---------------------------------------------
kill -hup `cat /data/nginx/logs/nginx.pid`
這句話比較長,不容易記住,現在發現一種更為簡潔的辦法:
killall -hup nginx
killall會將hup指令傳到所有的nginx程序裡,包括master和worker,但是worker程序並不認識hup指令,所以事實上只有master程序獲取了hup,並執行重啟。
於是乎,nginx的kill指令:
kill -usr1
kill -quit
......
都可以用killall簡化執行。
nginx 重啟指令碼
bin sh base dir usr local webserver nginx sbin nginx t c nginx conf nginx.conf nginx logs nginx.start killall 9 nginx sleep 1 nginx sbin nginx echo in...
Nginx 啟動指令碼 重啟指令碼
第一步 先執行命令關閉nginx sudo kill cat home nginx log nginx.pid 第二步 vi etc init.d nginx 輸入以下內容 儲存退出 第三步 chmod x etc init.d nginx 第四步 sbin chkconfig nginx on 檢...
Nginx 啟動指令碼 重啟指令碼
第一步 先執行命令關閉nginx sudo kill cat usr local nginx logs nginx.pid 第二步 vi etc init.d nginx 輸入以下內容 儲存退出 第三步 chmod x etc init.d nginx 第四步 sbin chkconfig ngin...