正在学习mongodb,此类NoSQL数据库,有利快速表达现实生活种数据关系,避免了sql数据库那样必须精心设计表结构,还需要关联表查询。

在实际应用的linux,mongod肯定是开机自启动的。 开始我猜想这是一个典型的linux daemon,就像httpd,mysqld一样。于是开始以 /etc/init.d/httpd 为模板写一个mongod shell脚本管理启动和关闭,以后就可以用service mongod start了。完成后把此脚本添加到/etc/rc.local后,系统不能正常启动。原来这个mongod不是正式的daemon,而是一个普通程序。

由于“开始我猜想这是一个典型的linux daemon,就像httpd,mysqld一样”这个错误的假设,导致一个回合的折腾。这让我想起了,杜威的《我们如何思维》 中一段话:

能在任何情况下准确判断上述每一步改走多远,如何适当完成。训练有素思维,应是恰到好处地完成每种情况所需的观察,联想、推理和实验性检验。而且善于吸收教训,吃一堑,长一智。 重要的是,思维应对问题敏感和问题的解决均熟巧老练。

每个审慎的判断,需要“如履薄冰,如临深渊”小心感觉。当然折腾未必是坏事。

 

为了能在后台运行,需要用到nohup或screen指令。于是写了如下mongotool.sh的shell,并在/etc/rc.local中运行此shell。

  1. #!/bin/bash 
  2.  
  3. lockfile=/data/mongod/mongo.lock 
  4. if [ -f $lockfile ];then 
  5.     echo "mongod is running, stop it now" 
  6.     rm -f $lockfile 
  7.     pid=`ps aux | grep mongod | awk '!/awk/ && !/grep/ {print $2}'
  8.     if [ "${pid}" != "" ]; then 
  9.         kill -2 ${pid}; 
  10.     fi 
  11. else 
  12.     nohup /mongodb2.0.4/bin/mongod --dbpath=/data/mongodb --logpath=/data/mongodb/mongodb.log 
  13.     touch $lockfile 
  14. fi 


注释:

1. 采用 nohup 指令让mondod在后台运行。即使关掉terminal,进程mongod还是运行的。

2. 关闭mongod进程,采用三次联合操作,值得玩味

   pid =`ps aux | grep mongod | awk '!/awk/ && !/grep/ {print $2}'