分享一份nginx重啟腳本
更新時(shí)間:2012年09月28日 21:44:31 作者:
nginx是超級(jí)穩(wěn)定的服務(wù)器,一般不會(huì)因?yàn)槌d問(wèn)題而需要重啟,重啟的目的一般都是修改配置文件后需要加載一下
最開始的時(shí)候,我是用最直接的重啟方式
killall -9 nginx;/data/nginx/sbin/nginx
如果機(jī)器比較慢,kill進(jìn)程時(shí)一瞬間殺不完,再執(zhí)行一次即可。這種重啟方式不是特別安全,如果配置有誤,則會(huì)重啟失敗,需要重新修改配置文件然后再啟 動(dòng),期間會(huì)消耗一點(diǎn)時(shí)間。不過(guò)對(duì)于目前普遍還是不怎么嚴(yán)格的http界而言,這點(diǎn)時(shí)間還不至于產(chǎn)生太大損失,只要不是在關(guān)鍵時(shí)刻搞出來(lái)就好。如果希望沿用 這種重啟辦法,我提議還是先好好測(cè)試吧。
后來(lái)我在nginx.net上看到了一種更奇妙的重啟
kill -HUP $pid($pid就是nginx master進(jìn)程的進(jìn)程號(hào))
我一般這樣用
kill -HUP `cat /data/nginx/logs/nginx.pid`
這種方式的好處是實(shí)現(xiàn)“平滑重啟”,在ps -aux中可以看到,nginx首先啟動(dòng)新進(jìn)程,舊的進(jìn)程仍然提供服務(wù),在一段時(shí)間后,舊的進(jìn)程服務(wù)結(jié)束就自動(dòng)關(guān)閉,剩下新進(jìn)程繼續(xù)服務(wù)。但是這種方式也 是有缺點(diǎn)的,如果配置文件有誤,或者資源沖突,則重啟失效,但nginx并沒(méi)有任何的提示!這就會(huì)時(shí)常發(fā)現(xiàn)改動(dòng)的配置文件沒(méi)有生效,又比較難找到問(wèn)題。
所以,最后雜和了一下問(wèn)題,弄了一個(gè)nginx.sh,這個(gè)版本的nginx.sh還是沒(méi)有解決kill -HUP的資源沖突的問(wèn)題,但解決了配置文件的問(wèn)題。資源沖突的比如80端口被占用、日志文件目錄沒(méi)有創(chuàng)建這種的,我再想想辦法。
#!/bin/sh
BASE_DIR='/data/'
${BASE_DIR}nginx/sbin/nginx -t -c ${BASE_DIR}nginx/conf/nginx.conf >& ${BASE_DIR}nginx/logs/nginx.start
info=`cat ${BASE_DIR}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 ${BASE_DIR}nginx/logs/nginx.pid`
echo "ok"
else
killall -9 nginx
sleep 1
${BASE_DIR}nginx/sbin/nginx
fi
else
echo "######## error: ########"
cat ${BASE_DIR}nginx/logs/nginx.start
fi
killall -9 nginx;/data/nginx/sbin/nginx
如果機(jī)器比較慢,kill進(jìn)程時(shí)一瞬間殺不完,再執(zhí)行一次即可。這種重啟方式不是特別安全,如果配置有誤,則會(huì)重啟失敗,需要重新修改配置文件然后再啟 動(dòng),期間會(huì)消耗一點(diǎn)時(shí)間。不過(guò)對(duì)于目前普遍還是不怎么嚴(yán)格的http界而言,這點(diǎn)時(shí)間還不至于產(chǎn)生太大損失,只要不是在關(guān)鍵時(shí)刻搞出來(lái)就好。如果希望沿用 這種重啟辦法,我提議還是先好好測(cè)試吧。
后來(lái)我在nginx.net上看到了一種更奇妙的重啟
kill -HUP $pid($pid就是nginx master進(jìn)程的進(jìn)程號(hào))
我一般這樣用
kill -HUP `cat /data/nginx/logs/nginx.pid`
這種方式的好處是實(shí)現(xiàn)“平滑重啟”,在ps -aux中可以看到,nginx首先啟動(dòng)新進(jìn)程,舊的進(jìn)程仍然提供服務(wù),在一段時(shí)間后,舊的進(jìn)程服務(wù)結(jié)束就自動(dòng)關(guān)閉,剩下新進(jìn)程繼續(xù)服務(wù)。但是這種方式也 是有缺點(diǎn)的,如果配置文件有誤,或者資源沖突,則重啟失效,但nginx并沒(méi)有任何的提示!這就會(huì)時(shí)常發(fā)現(xiàn)改動(dòng)的配置文件沒(méi)有生效,又比較難找到問(wèn)題。
所以,最后雜和了一下問(wèn)題,弄了一個(gè)nginx.sh,這個(gè)版本的nginx.sh還是沒(méi)有解決kill -HUP的資源沖突的問(wèn)題,但解決了配置文件的問(wèn)題。資源沖突的比如80端口被占用、日志文件目錄沒(méi)有創(chuàng)建這種的,我再想想辦法。
復(fù)制代碼 代碼如下:
#!/bin/sh
BASE_DIR='/data/'
${BASE_DIR}nginx/sbin/nginx -t -c ${BASE_DIR}nginx/conf/nginx.conf >& ${BASE_DIR}nginx/logs/nginx.start
info=`cat ${BASE_DIR}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 ${BASE_DIR}nginx/logs/nginx.pid`
echo "ok"
else
killall -9 nginx
sleep 1
${BASE_DIR}nginx/sbin/nginx
fi
else
echo "######## error: ########"
cat ${BASE_DIR}nginx/logs/nginx.start
fi
相關(guān)文章
Nginx搭建負(fù)載均衡集群的實(shí)現(xiàn)
這篇文章主要介紹了Nginx搭建負(fù)載均衡集群的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Nginx+uwsgi+ssl配置https的詳細(xì)步驟
nginx是一個(gè)輕量級(jí)的web服務(wù)器,在處理靜態(tài)資源和高并發(fā)有優(yōu)勢(shì),uwsgi是一個(gè)基于python的高效率的協(xié)議,處理后端和動(dòng)態(tài)網(wǎng)頁(yè)有優(yōu)勢(shì),我這里使用的是Ubuntu18.04版本,服務(wù)器在阿里云,感興趣的朋友跟隨小編一起看看吧2023-10-10全面了解Nginx中的HTTP協(xié)議相關(guān)模塊配置
HTTP的處理是Nginx服務(wù)器的最重要功能,這里我們就帶大家來(lái)全面了解Nginx中的HTTP協(xié)議相關(guān)模塊配置,需要的朋友可以參考下2016-07-07nginx代理部署Vue刷新頁(yè)面404的問(wèn)題解決
在上線vue開發(fā)的前端網(wǎng)頁(yè)部署在服務(wù)器上后,刷新頁(yè)面顯示404,本文就來(lái)介紹一下nginx代理部署Vue刷新頁(yè)面404的問(wèn)題解決,感興趣的可以了解一下2023-12-12nginx有哪些常規(guī)調(diào)優(yōu)手段詳解
性能調(diào)優(yōu)就是用更少的資源提供更好的服務(wù),成本利益最大化,下面這篇文章主要給大家介紹了關(guān)于nginx有哪些常規(guī)調(diào)優(yōu)手段的相關(guān)資料,需要的朋友可以參考下2023-01-01如何實(shí)現(xiàn)Nginx同一端口同時(shí)支持http與https協(xié)議
最近有一個(gè)需求,需要讓一個(gè)端口的http服務(wù)支持https訪問(wèn),本文就來(lái)介紹一下如何實(shí)現(xiàn)Nginx同一端口同時(shí)支持http與https協(xié)議,感興趣的可以了解一下2023-11-11