Чи працює mongodb?


117

На моєму сервері Unix я встановив mongodb та драйвери php.

Моє запитання - як я можу дізнатися, чи працює 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 - допомога для отримання довідки та варіантів запуску
Ср 23 лютого 08:06:54 MongoDB запуск: pid = 7271 порт = 27017 dbpath = / data / db / 32-bit

** ПРИМІТКА: при використанні 32-бітного MongoDB ви обмежуєтесь приблизно 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
підключення до: тест.
ср. 23 лютого 08:25:10 Помилка : не вдалося підключитися до сервера 127.0.0.1 (anon):
виняток 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 вечора ttys000 0: 00.00 grep mongo, це означає, що він працює?
L1ghtk3ira

1
статус mongod служби для мене не працює, але статус служби mongodb працює.
вікс

5
від mongo 2.6 послуга mongod раніше її mongodb, плутаючи так
цукімі

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або ще Connection refused.
Олександр


9

Щоб перевірити поточний стан роботи mongodb, використовуйте: sudo service mongodb status


8

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

напр

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

Ознайомтеся з повною документацією щодо запуску та зупинки Монго .


Дякую. Я зрозумів це: [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: groups.google.com/group/mongodb-user
AdaTheDev

Але я почав це &, і тепер не можу знайти процедіда.
бобобобо

@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, але я потрапив сюди шукати рішення для вузла. Використання монгоскіна:

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 не працює. Монгоскіну потрібно насправді здійснити деякий дзвінок (наприклад, 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.