2012-05-19 4 views
3

Я всегда тестировал репликаты, запуская несколько процессов mongod на том же сервере (потому что использование нескольких сервисов дороже, и я просто тестирую на этом этапе).Не удается запустить mongodb несколько раз при использовании start-stop-daemon?

Однако, так как я обновил Монго до версии v2.0.5 я получаю следующее, когда я пытаюсь запустить mongod снова (на другой порт, с другой папке базы данных и т.д.):

mongod already running

Почему это так? Есть ли флаг, чтобы пропустить эту проверку?

Update: по какой-то причине это происходит только тогда, когда я бегу mongod так:

sudo start-stop-daemon --start -c mainuser --exec /usr/local/bin/mongod -- --journal --nohttpinterface --dbpath /home/mainuser/data/db-secondary --logpath /home/mainuser/data/logs/mongodb-secondary.log --logappend --replSet appname --port 30001

Это не происходит, когда я запускаю его так:

sudo /usr/local/bin/mongod --journal --nohttpinterface --dbpath /home/mainuser/data/db-secondary --logpath /home/mainuser/data/logs/mongodb-secondary.log --logappend --replSet appname --port 30001

К сожалению я должны использовать start-stop-daemon для использования в моем сценарии upstart на Ubuntu 10.04 LTS. Почему это может вызвать эту проблему?

После прочтения manpage для start-stop-daemon становится ясно, что он намеренно не пытается запустить процесс еще раз, потому что он признает его как ту же «услугу». Тем не менее, я использую только start-stop-daemon, чтобы я мог работать как другой пользователь с Upstart. Можно ли обойти проверку или запустить как пользователь без права пользователя в выскочке по-другому?

ответ

0

Это оказалось особенностью start-stop-daemon, которую я использовал с выскочкой, чтобы работать как другой пользователь.

Не используя start-stop-daemon, эта проблема была решена. Внутри моей выскочки сценарий, я теперь работать как mainuser с помощью sudo:

sudo -u mainuser /usr/local/bin/mongod --journal --nohttpinterface --dbpath /home/mainuser/data/db-secondary --logpath /home/mainuser/data/logs/mongodb-secondary.log --logappend --replSet appname --port 30001 
-1

Это происходит потому, что PID-файл уже существует для бегущего mongod.

Просто используйте другой pid с start-stop-daemon. Например,

sudo start-stop-daemon --start --pid=/var/run/mongodb2.pid --chuid mongodb --exec /usr/bin/mongod -- --config /etc/mongodb2.conf 

Так что не жалуются «/ USR/бен/mongod уже работает»

+0

Хм .. У меня была такая же проблема, как и у, и в файле/var/run не было файла mongodb.pid. Однако у меня был другой mongodb (из командной строки). Когда я остановил этот, я смог использовать 'start-stop-daemon' (который используется' sudo start mongodb'). – drevicko

+0

С моим установленным apt-установленным mongodb (1: 2.0.6-1ubuntu4) сценарий инициализации НЕ имеет параметр '-pid', но у него есть' --exec/usr/bin/mongod' - это означает, mongod' работает в любом месте системы, сценарий инициализации не запускает его. – drevicko

+0

Параметр '--pidfile' – geronime

1

Возможное решение: Вам нужно использовать ключ --name старт-стоп-демона, чтобы дать различные имена для разных процессов. Например, для node.js:

start-stop-daemon --name node-charts --start --exec /usr/bin/node -- someapp.js

и

start-stop-daemon --name node-web --start --exec /usr/bin/node -- someotherapp.js

без имени он не запускается из-за него же/USR/бен/узла имя процесса.