В настоящее время я пишу программное обеспечение для управления процессами. Один из используемых нами пакетов - mongo.
Есть ли разница между запуском mongo с помощью
mongod --fork --logpath=/my/path/mongo.log --logappend
и
nohup mongod >> /my/path/mongo.log 2>&1 < /dev/null &
?
Моя первая мысль заключалась в том, что --fork может порождать больше процессов и / или потоков, и мне было предложено, что --fork может быть полезен для смены эффективного пользователя (понижение привилегий). Но все мы запускаем под одним и тем же пользователем (диспетчер процессов и mongod), есть ли еще какая-то разница?
Спасибо
Разница в том, что с
mongod --fork --logpath=/my/path/mongo.log
Mongo сам разветвляет процесс, чтобы он мог работать как демон. Это предполагаемый способ, потому что mongo, вероятно, может что-то сделать до создания нового процесса.
С участием
nohup mongod >> /my/path/mongo.log 2>&1 < /dev/null &
Монго не знает, что это раздвоение.
Я бы сказал, что всегда лучше позволить серверному программному обеспечению выполнять разветвление, чтобы оно могло производить оптимизацию. NoHUP предназначен только для программного обеспечения, у которого нет возможности разветвления.
Я в целом согласен с ответом Кристофера П. (и проголосовал за него), но поговорим немного о параметре ведения журнала здесь. Первоначальное сканирование приведенных вами примеров предполагает, что в конечном итоге у вас будут лучшие варианты ведения журнала с версией nohup, чем версия --fork. Если вместо этого вы начали с:
mongod --fork --logpath=/my/path/mongo.log --logappend
Тогда у вас будет более близкий матч. Это также дает вам возможность довольно легко вращать файлы журнала (с помощью сигнала или команды):
http://www.mongodb.org/display/DOCS/Logging#Logging-Rotatingthelogfiles
В противном случае вам придется управлять всем этим самостоятельно, и процесс будет думать, что он регистрируется в stdout, а не в файле.
Не совсем то, о чем вы спрашивали, но еще несколько доказательств в пользу --fork.