ubuntu如何每次关机都让MongoDB之类的特殊进程安全退出

一直以来,老蔡几乎每周都要使用到MongoDB的修复功能,因为开发环境的电脑在公司,每天回家得关机,数据稍多一点的时候,MongoDB在关机的时候就会较大概率的出现非正常关机,导致MongoDB的锁没有正常解除的症状。

在sf上问了下,felix021同学说应该在/etc/rc*.d里面加K开头的软连接,这样系统关机的时候就会自动去尝试软关闭(polite terminate signal),于是尝试了下

update-rc.d mongodb defaults

脚本自动创建了

/etc/rc0.d/K20mongodb
/etc/rc1.d/K20mongodb
/etc/rc6.d/K20mongodb

这么几个软连接,到昨天为止,整整坚持了9天,就在快突破1位数的天数时,在今天被发现再次死锁。那么,有没有办法可以根治老死锁呢?

查看了一下资料[1],说kill timeout默认时间是5秒,于是老蔡觉得增大kill timeout时间应该就能解决问题了。正在尝试,如果坚持到10天了,再来记录一下。

具体方法如下:

比如mongodb:/etc/init/mongodb.conf

start on xxx
stop on xxx
// 后面加入
kill timeout 3600

恩,如果解决了,这辈子再也不会出现这种问题了吧。

2013-06-15更新:

距离增加kill延时,已经整整一个月了,mongodb一直都没有出问题,看样子无法安全退出MongoDB的问题已经解决了,希望这个方法对关机时不想强行关闭程序的朋友有帮助(延长kill timeout时间的方法可以用于其他服务上)。

注:本方法仅在ubuntu 12.04和12.10上使用过,debian 6.0似乎没有/etc/init文件夹,其他版本系统未知。

参考文献:

「1」http://upstart.ubuntu.com/cookbook/#kill-timeout