Mongodb работает?


117

Я установил mongodb и драйверы php на свой unix-сервер.

Мой вопрос: как узнать, запущен ли mongodb? Есть ли простой запрос командной строки для проверки статуса? Если я запустил его один раз из оболочки, он продолжит работу, если я выйду из оболочки (похоже, это не так). Как я могу сделать соединение mongodb постоянным и автоматически запускаться при перезагрузке сервера?

Я могу бегать:

-bash-3.2 $ su
Пароль:
[root @ xxx] # cd / var / lib
[root @ xxx] # ./mongodb-linux-i686-1.6.5/bin/mongod
./mongodb-linux-i686-1.6. 5 / bin / mongod --help для справки и параметров запуска
Среда, 23 февраля 08:06:54 Запуск MongoDB: pid = 7271 port = 27017 dbpath = / data / db / 32-bit

** ПРИМЕЧАНИЕ: при использовании MongoDB 32 bit вы ограничены примерно 2 гигабайтами данных
** см. Http://blog.mongodb.org/post/137788967/32-bit-limitations

** ВНИМАНИЕ: вы работаете в OpenVZ. Известно, что это сломано !!!

Среда, 23 февраля, 08:06:54, версия db v1.6.5, версия pdfile, версия 4.5,
среда, 23 февраля, 08:06:54, версия git: 0eb017e9b2828155a67c5612183337b89e12e291,
среда, 23 февраля, 08:06:54 sys info: Linux domU-12-31-39-01 -70-B4 2.6.21.7-2.fc8xen # 1 SMP, пятница,
15 февраля, 12:39:36 EST 2008 i686 BOOST_LIB_VERSION = 1_37,
среда, 23 февраля, 08:06:54 [initandlisten] ожидает подключения к порту 27017,
среда 23 февраля, 08: 06:54 [websvr] интерфейс веб-администратора прослушивает порт 28017

Если я открою отдельную оболочку, я могу подключиться к mongodb:

-bash-3.2 $ cd / var / lib
-bash-3.2 $ ./mongodb-linux-i686-1.6.5/bin/mongo
Версия оболочки MongoDB: 1.6.5
подключение к: test
db.foo.find ()
{" _id ": ObjectId (" 4d63d7d3eb95985ab19c8feb ")," a ": 1}

Однако, если я закрою начальную оболочку, я не смогу подключиться:

-bash-3.2 $ cd / var / lib
-bash-3.2 $ ./mongodb-linux-i686-1.6.5/bin/mongo
Версия оболочки MongoDB: 1.6.5
подключение к: test
среда 23 февраля 08:25:10 Ошибка : не удалось подключиться к серверу 127.0.0.1 (анон): 1154
исключение: сбой подключения

Ответы:


144

проверьте либо:

   ps -edaf | grep mongo | grep -v grep  # "ps" flags may differ on your OS

или

   /etc/init.d/mongodb status     # for MongoDB version < 2.6

   /etc/init.d/mongod status      # for MongoDB version >= 2.6

или

   service mongod status

чтобы узнать, запущен ли mongod (для этого вам нужно быть root или добавить к нему префикс sudo). Обратите внимание, что команда grep всегда отображается как отдельный процесс.

проверьте файл журнала /var/log/mongo/mongo.log, чтобы узнать, есть ли какие-либо проблемы


20
должно быть: статус службы mongodb
MhdSyrwan

12
Вы также можете сделать pgrep mongo.
slm

1
Я получил это: 501 5365 418 0 4:10 pm ttys000 0: 00.00 grep mongo, это означает, что он работает?
L1ghtk3ira

1
Статус сервиса mongod не работал у меня, но статус сервиса mongodb работал.
viks

5
от mongo 2.6 сервис является mongod раньше его mongodb, сбивает с толку да
tsukimi

40

Я нахожу:

ps -ax | grep mongo

Чтобы быть более последовательным. Возвращенное значение можно использовать для определения количества запущенных экземпляров mongod.


6
Кроме того, вы можете рассмотреть возможность добавления фильтра, чтобы не возвращать выполняемый вами процесс grep. Итак: ps -ax | grep -v grep | grep mongo
DCaugs

34

Чтобы быстро проверить, запущен ли mongodb, этот быстрый трюк с nc сообщит вам об этом.

nc -zvv localhost 27017

Приведенная выше команда предполагает, что вы запускаете ее на порту по умолчанию на localhost.

Для автоматического запуска вы можете посмотреть эту ветку .


1
Да, это работает, если просто проверить, слушает ли что-то порт. Если это так, вывод будет содержать 27017 openили else Connection refused.
Александр


9

Чтобы проверить текущий статус работы mongodb, используйте: sudo service mongodb status


8

Правильно, закрытие оболочки остановит MongoDB. Попробуйте использовать --forkаргумент командной строки для процесса mongod, который вместо этого запускает его как демон. Я не гуру Unix, но уверен, что должен быть способ заставить его автоматически запускаться при загрузке машины.

например

mongod --fork --logpath /var/log/mongodb.log --logappend

Ознакомьтесь с полной документацией по запуску и остановке Mongo .


Спасибо. Я получил это: [root@xxx lib]# ./mongodb-linux-i686-1.6.5/bin/mongod --fork --logpath /var/log/m ongodb.log --logappend all output going to: /var/log/mongodb.log forked process: 7518но все же, когда я закрываю оболочку и открываю новую, я получаюConnect failed

хм, у меня работает (Ubuntu 64bit VM, Mongo v1.7.6), поэтому я не уверен, почему это не для вас tbh. Если у вас не получается заставить его работать, лучше всего разместить его на форуме mongodb
AdaTheDev

Но я начал с &, а теперь не могу найти processid.
bobobobo 08

@bobobobo - как вы пытаетесь найти идентификатор процесса?
ТАСС

ps -e | grep mongod
bobobobo

3

Вы можете использовать команду ниже, чтобы проверить статус MongoDB, например: sudo service MongoDB statusкоторый отображает статус службы MongoDB, как показано на снимке экрана:

Статус MongoDB


2

Вероятно, потому что я не выключил свой сервер разработки должным образом или по аналогичной причине. Чтобы исправить это, снимите блокировку и запустите сервер с помощью: sudo rm /var/lib/mongodb/mongod.lock ; sudo start mongodb


1

Я знаю, что это для php, но я пришел сюда в поисках решения для node. Использование монгоскина:

mongodb.admin().ping(function(err) {
    if(err === null)
        // true - you got a conntion, congratulations
    else if(err.message.indexOf('failed to connect') !== -1)
        // false - database isn't around
    else
        // actual error, do something about it
})

С другими драйверами вы можете попытаться установить соединение, и если это не удастся, вы знаете, что сервер mongo не работает. Mongoskin действительно нужно сделать какой-то вызов (например, ping), потому что он подключается лениво. Для php вы можете использовать метод попытки подключения. Сделайте сценарий!

PHP:

$dbIsRunning = true
try {
  $m = new MongoClient('localhost:27017');
} catch($e) {
  $dbIsRunning = false
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.