При попытке остановить mongodb командой service mongod stop остается файл /var/lib/mongo/mongod.lock Соответственно, при следующем старте, mongodb считает, что было некорректное завершение работы. Поэтому отказывается стартовать и требует провести процедуру восстановления. Судя по всему, действительно происходит некорректный останов mongodb, т.к. при корректном выключении, файл /var/lib/mongo/mongod.lock должен удаляться. Возможно посылается не тот сигнал процессу из init-скрипта. Детали, как можно корректно остановить mongodb можно найти здесь: http://docs.mongodb.org/manual/tutorial/recover-data-following-unexpected-shutdown/ Пожалуйста, измените init-скрипт, чтобы mongodb корректно останавливался. Спасибо!
Небольшая поправка: Файл /var/lib/mongo/mongod.lock должен не удаляться, а обнуляться при корректном завершении mongodb.
Похоже, ошибка нестабильная и чаще проявляется на больших базах (у меня на > 10Гб) И, возможно, зависит от интенсивности операций чтения/записи во время останова.
Ошибка, скорее всего, действительно связана с init-скриптом mongodb в ALT Linux. На больших и интенсивно используемых базах, корректный останов mongodb происходит в течении 5-15 сек (у меня так, по крайней мере). Но init-скрипт убивает процесс mongodb, не дожидаясь конца останова. Отсюда и проблема. Временный "костыль", позволяющий обойти эту проблему: В файле /etc/init.d/mongod заменить функцию stop() { stop_daemon --lockfile "$LOCKFILE" -- mongod RETVAL=$? return $RETVAL } на что-то типа такого: stop() { /usr/bin/mongod --shutdown $OPTIONS RETVAL=$? rm $LOCKFILE return $RETVAL } И желательно в restart() { stop start } между stop и start вставить какую-то задержку, типа sleep 5 т.к. иногда mongodb не успевает отдать занятый bind Я понимаю, что "костыль" корявый, но по крайней мере - это работает более корректно.
Fixed in 2.4.8-alt1