Не удается запустить mongodb несколько раз при использовании start-stop-daemon?

Я всегда тестировал наборы реплик, запуская несколько процессов mongod на одном сервере (поскольку использование нескольких серверов обходится дороже, и на данный момент я просто тестирую).

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

mongod already running

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

Обновление: по какой-то причине это происходит только тогда, когда я запускаю 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 для использования в моем сценарии выскочки на Ubuntu 10.04 LTS. Почему это может вызвать эту проблему?

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


person Tom    schedule 19.05.2012    source источник


Ответы (3)


Возможное решение: вам нужно использовать ключ start-stop-daemon --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/bin/node.

person Michael Plakhov    schedule 04.06.2015

Это оказалось особенностью 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
person Tom    schedule 19.05.2012

Это связано с тем, что файл 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/bin/mongod уже запущен»

person Anuj Gupta    schedule 22.06.2013
comment
Хм... У меня была та же проблема, что и у оператора, и в /var/run не было файла mongodb.pid. Однако у меня был запущен другой mongodb (из командной строки). Когда я остановил его, я смог использовать start-stop-daemon (который используется sudo start mongodb). - person drevicko; 30.07.2013
comment
С моим apt-установленным mongodb (1: 2.0.6-1ubuntu4) сценарий инициализации НЕ имеет опции --pid, но ДЕЙСТВИТЕЛЬНО имеет --exec /usr/bin/mongod - это означает, что если исполняемый файл mongod запущен где-либо в системе, сценарий инициализации не запустится Это.. - person drevicko; 30.07.2013
comment
Параметр --pidfile - person geronime; 21.11.2014