Я запускаю MongoDB на сервере Ubuntu. Он использует сценарий выскочки для запуска mongod при загрузке машины. Я заметил, что если процесс выйдет из строя, он не будет перезапущен.
Как я могу убедиться, что в случае сбоя процесс mongod перезапустился?
Я сам нашел ответ: самый простой способ добиться этого - добавить следующие две строки в конец скрипта выскочки, установленного MongoDB (/etc/init/mongodb.conf
):
respawn
respawn limit 10 90
Это попытается перезапустить процесс, если он завершится, и остановится, если он выйдет из строя более 10 раз за 90 секунд.
Основываясь на принятом ответе (и поскольку у меня недостаточно представителей, чтобы его прокомментировать)
Respawn
НЕ является параметром конфигурации mongo, он предназначен для файла конфигурации службы выскочки.
respawn
respawn limit 10 90
В Digital Ocean есть хороший учебник по использованию upstart и systemd (новее). https://www.digitalocean.com/community/tutorials/how-to-configure-a-linux-service-to-start-automatically-after-a-crash-or-reboot-part-1-practical-examples
Я думаю ты хочешь что-то вроде Монит или Бог здесь для автоматического перезапуска служб при их остановке / сбое. Ваше описание самой аварии предполагает OOM Killer, чего можно избежать с помощью настройка свопа место на хосте.
Прежде всего, вы должны понять, почему происходит сбой системной службы. Недостаток памяти? Ошибки в библиотеках? Неправильный или не обновленный пакет? Ваше программное обеспечение, использующее MongoDB, не работает должным образом?
В неудачном случае вы не можете найти ответ, вы можете использовать грубую силу для своей системы: я бы регулярно проверял с помощью скрипта, существует ли файл Mongod PID, он должен храниться где-то в / var / run, если нет, service mongod start
.
Вы могли бы использовать Руководитель, этот инструмент может перезапустить все, что вам нужно, и его очень просто настроить.