我一直在同一台服务器上启动多个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上的upstart脚本中使用。为什么会导致这个问题?
在阅读start-stop-daemon
的联机帮助页后,很明显有意无意再次启动该过程,因为它认为它是相同的“服务”。但是,我只使用start-stop-daemon
,因此我可以使用Upstart作为其他用户运行。是否可以绕过检查,或以不同的方式在upstart中以非sudo用户身份运行?
答案 0 :(得分:1)
可能的解决方案: 您需要使用start-stop-daemon的key --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进程名称。
答案 1 :(得分:0)
这是start-stop-daemon
的一个功能,我与upstart一起用作另一个用户。
不使用start-stop-daemon
,此问题已得到解决。在我的upstart脚本中,我现在使用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
答案 2 :(得分:-1)
这是因为正在运行的mongod已存在pid文件。
使用不同的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已经在运行”