给定一个干净的mongo数据目录,我运行这样的启动脚本(我意识到我可以使用service
,但这是一个不同的问题,我使用这个脚本作为解决方法):
>$ cat startMongo.sh
nohup sudo mongod --rest --fork --config /etc/mongod.conf > logs/mongo.log 2>&1 &
问题在于这会以某种方式启动大量流程:
>$ ps -efw | grep mongo
root 7038 1 0 21:29 pts/0 00:00:00 sudo mongod --rest --fork --config /etc/mongod.conf
root 7039 7038 0 21:29 pts/0 00:00:00 mongod --rest --fork --config /etc/mongod.conf
root 7040 7039 0 21:29 ? 00:00:00 mongod --rest --fork --config /etc/mongod.conf
root 7041 7040 10 21:29 ? 00:00:01 mongod --rest --fork --config /etc/mongod.conf
我认为这种情况正在发生,而Mongo会做一些预分配,我可以在日志文件中看到。过了一会儿,确实消失了:
>$ ps -efw | grep mongo
root 7041 1 4 21:29 ? 00:00:01 mongod --rest --fork --config /etc/mongod.conf
我的问题是这个是否应该发生?我在Windows中尝试过相同的操作,但没有看到问题。我确信直到最近才在Ubuntu中出现(我从2.6升级到3)。
答案 0 :(得分:1)
我试图运行mongod --fork
,我得到了:
about to fork child process, waiting until server is ready for connections.
我想这意味着主进程在实际分支到最终侦听器porcess之前会做一些事情,而这些东西可以分配日志文件。我还获得了您描述的多进程状态。
我在没有--fork
的情况下尝试了相同的命令,并且没有额外的过程。
所以你认为是正确的,额外产生的mongod
用于预分配,但仅限于--fork
模式。
无论如何,此时使用nohup
是没用的,因为如果你用--fork
运行mongo,你也会将它发送到后台模式:你的nohup日志只记录如下内容:
about to fork child process, waiting until server is ready for connections.
forked process: 7306
child process started successfully, parent exiting