inittab не перезапускает службу после сбоя службы в Red Hat 6.7
ПРИМЕЧАНИЕ: я использую Red Hat 6.7
У меня есть служба, настроенная с помощью системы инициализации Linux, чтобы запускать процесс как службу при загрузке машины. Это было сделано с помощью одноразовой настройки из командной строки:
ln -snf /home/me/bin/my_service /etc/init.d/my_service
chkconfig --add my_service
chkconfig --level 235 my_service on
Когда ОС перезагружается, служба запускается как положено.
Мне также нужно перезапустить сервис, если сервис (my_service) падает. Из того, что я прочитал, все, что мне нужно сделать, это добавить запись в /etc/inittab, которая выглядит следующим образом:
mysvc: 235: респаун:/ главная / мне / бен /my_service_starter
Где my_service_starter выглядит так:
#!/bin/bash
/home/me/bin/my_service start
Насколько я понимаю, когда система init обнаружит, что my_service не запущена, она попытается перезапустить ее, запустив my_service_starter.
Однако это не похоже на работу.
Мне нужно понять, как сказать системе инициализации Linux перезапустить мой сервис, когда сервис падает.
2 ответа
Учитывая запись как:
mysvc:235:respawn:/home/me/bin/my_service_starter
Тогда inittab будет:
- вызов
/home/me/bin/my_service_starter
- который позвонит
/home/me/bin/my_service start
- ... а затем выйти, так
init
будет ли ваш сервис не удался - так
init
позвоню/home/me/bin/my_service_starter
снова
... и так далее, что приведет к тому, что init решит, что ваш скрипт слишком быстро восстанавливается, после чего он полностью его проигнорирует.
Ожидается, что процесс, запущенный inittab, не завершится. Если вы действительно хотите использовать inittab для поддержки вашего сервиса, вы можете удалить /etc/init.d/my_service
а затем в /etc/inittab
у вас было бы что-то вроде:
mysvc:235:respawn:/home/me/bin/my_service
И вам нужно убедиться, что my_service
работает на переднем плане (некоторые программы по умолчанию автоматически демонизируются, хотя часто они имеют --run-in-foreground
флаг).
Если вы обновитесь до CentOS 7 или чего-то еще с помощью systemd, все станет проще.
Вы также можете исследовать "сторонние" супервизоры процессов, такие как "supervisord" или "runit", которые можно использовать для мониторинга / перезапуска процессов в CentOS 6.
Обновить
Как указывает mangotang, и я забыл, RHEL 6 фактически поставляется с upstart, хотя в нем почти исключительно используются сценарии инициализации в стиле SysV. Поэтому лучшим решением было бы создать выскочивший сервис. Здесь есть несколько разумных документов для начинающих.
На RHEL 6.X вверху файла /etc/inittab написано:
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM
RHEL 6.X использует Upstart вместо системы инициализации System V. См. Справочные страницы для initctl(8) и initctl(5), или спросите Google об Upstart.