mongod fork 与 nohup

mongod fork 与 nohup

我目前正在编写流程管理软件。我们使用的一个软件包是 mongo。

启动 mongo 和

mongod --fork --logpath=/my/path/mongo.log --logappend

nohup mongod >> /my/path/mongo.log 2>&1 < /dev/null &

我的第一个想法是 --fork 可以产生更多进程和/或线程,有人建议我 --fork 可能有助于更改有效用户(降级权限)。但是我们都是在同一用户(进程管理器和 mongod)下运行的,那么还有其他区别吗?

谢谢

答案1

不同之处在于

mongod --fork --logpath=/my/path/mongo.log

Mongo 本身会分叉进程,以便它可以作为守护进程运行。这是预期的方式,因为 mongo 可能会在分叉新进程之前执行某些操作。

nohup mongod >> /my/path/mongo.log 2>&1 < /dev/null &

Mongo 不知道它已被分叉。

我认为让服务器软件进行分叉总是更好的,这样它就可以进行优化。NoHUP 仅适用于没有分叉选项的软件。

答案2

我大体上同意 Christopher P 的回答(并投了赞成票),但在这里想多谈谈日志选项。初步扫描您给出的示例会发现,使用 nohup 版本会比使用 --fork 版本得到更好的日志选项。如果您从以下版本开始:

mongod --fork --logpath=/my/path/mongo.log --logappend

然后,您将得到更接近的匹配。它还为您提供了非常容易地轮换日志文件的选项(通过信号或命令):

http://www.mongodb.org/display/DOCS/Logging#Logging-Rotatingthelogfiles

否则,您将需要自己管理所有内容,并且该过程将认为它正在记录到标准输出而不是文件。

这并不是您所问的,但是提供了更多支持--fork 的证据。

相关内容