脚本编程

Linux下的mongodb服务脚本,以备不时之需

Jager · 6月4日 · 2015年 · · 6047次已读

前些天,一位开发同事找到我,说他测试环境的 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

非常简单,贴到博客记录一下,以备不时之需。

8 条回应
  1. aladd 2015-6-6 · 0:40

    这块我不懂,就来水一下吧。
    因为我想要看看能否抢到沙发!!!

  2. 威客百科 2015-6-8 · 10:34

    楼上的不要闹好吗,不就是点英文字母,拼凑出来的额

  3. 脑精网 2015-6-9 · 21:08

    看评价也够搞笑的,原来一篇我看不懂的文章,也能会搞笑的评论。英语我还真只认识单个的。楼上告诉我,能写汉字就能写文章了。我回去写小说去

    • avatar
      Jager 2015-6-9 · 22:02

      :mrgreen: 确实有点意思

  4. 西贝博客 2015-6-10 · 12:27

    我真想问问,都是怎么学会的?看着我就头疼。。。 :?:

  5. 四川卫校 2016-6-4 · 10:59

    谢谢博主分享。 很不错的文章。

  6. 成都川科卫校 2016-6-12 · 11:38

    我去 就我一个人看不懂吗。

  7. 成航先森 2016-8-23 · 14:46

    感觉Mongodb用着别扭,还是MySQL用着习惯