前些天,一位开发同事找到我,说他测试环境的 mongodb 经常挂掉,要我写一个监控或复活的脚本。我觉得很奇怪,测试环境又没啥负载,经常挂掉肯定有非常规原因。
跑过去看了一下日志,发现存在stop记录,我就纳闷了,没人操作他还会自己stop。这明显不是挂掉了,于是到history中看了下同事的启动命令:
代码如下:
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --logpath=/data/mongodb.log --logappend &
原来如此!因为他没有用nohup启动,所以只要他的终端离线或者关闭,mongodb就会自动退出了!解决办法很简单,如下启动即可:
代码如下:
nohup /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --logpath=/data/mongodb.log --logappend >/dev/null 2>&1 &
这样敲命令也着实苦逼,所以从网上找了一个mongodb服务脚本就舒服多了:
#!/bin/sh
#
#mongod - Startup script for mongod
#
# chkconfig: - 85 15
# description: Mongodb database.
# processname: mongod
# Source function library
. /etc/rc.d/init.d/functions
# things from mongod.conf get there by mongod reading it
# OPTIONS
OPTIONS=" --dbpath=/home/data/mongodb/ --logpath=/home/data/mongodb/mongodb.log --logappend &"
#mongod
mongod="/usr/local/mongodb/bin/mongod"
lockfile=/var/lock/subsys/mongod
start()
{
echo -n $"Starting mongod: "
daemon $mongod $OPTIONS
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch $lockfile
}
stop()
{
echo -n $"Stopping mongod: "
killproc $mongod -QUIT
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f $lockfile
}
restart () {
stop
start
}
ulimit -n 12000
RETVAL=0
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload|force-reload)
restart
;;
condrestart)
[ -f $lockfile ] && restart || :
;;
status)
status $mongod
RETVAL=$?
;;
*)
echo "Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
RETVAL=1
esac
exit $RETVAL
将代码保存到 /etc/init.d/mongodb,然后使用 chmod +x /etc/init.d/mongodb 添加执行权限。
现在,就可以使用 service 命令来控制mongodb了:
代码如下:
service mongodb start|stop|restart
#或
/etc/init.d/mongodb start|stop|restart
非常简单,贴到博客记录一下,以备不时之需。
您可能感兴趣的文章:MongoDB学习笔记—Linux下搭建MongoDB环境在Linux ubuntu下安装mongodb的方法Linux服务器安装PHP MongoDB扩展的方法Windows或Linux系统中备份和恢复MongoDB数据的教程Linux系统下MongoDB的简单安装与基本操作Linux下定时切割Mongodb数据库日志并删除指定天数前的日志记录