正在学习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。
- #!/bin/bash
- lockfile=/data/mongod/mongo.lock
- if [ -f $lockfile ];then
- echo "mongod is running, stop it now"
- rm -f $lockfile
- pid=`ps aux | grep mongod | awk '!/awk/ && !/grep/ {print $2}'`
- if [ "${pid}" != "" ]; then
- kill -2 ${pid};
- fi
- else
- nohup /mongodb2.0.4/bin/mongod --dbpath=/data/mongodb --logpath=/data/mongodb/mongodb.log
- touch $lockfile
- fi
注释:
1. 采用 nohup 指令让mondod在后台运行。即使关掉terminal,进程mongod还是运行的。
2. 关闭mongod进程,采用三次联合操作,值得玩味
pid =`ps aux | grep mongod | awk '!/awk/ && !/grep/ {print $2}'