`

nginx重启脚本 (平滑重启nginx)

    博客分类:
  • PHP
阅读更多

nginx重启脚本 (平滑重启nginx)

栏目:技巧与优化      1,641 views      2 枚回复

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/’

${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

———————————————

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
……


收藏分享: QQ书签 / 百度收藏 / Google书签 / 收藏到鲜果 / Digg / Del.icio.us


2 枚回复
2009年10月27日于12:50 下午

怎么还是这么二的方案呢,kill 来kill去。

nginx早就支持的了 -s 参数,好好学习下吧!

2010年01月19日于11:43 下午

楼上更二,好好去学习liunx下nginx,别拿windows来显摆!


发表回复

XHTML: 您可以使用如下代码:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引擎Rambler(俄文:Рамблер)使用。 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.



© 2010 Nginx 中文网 - Powered By WordPress - Top

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics