
Как это реализовать без systemd (chkconfig и т. д.)?
Я хотел бы перезапустить PostgreSQL, Mongod и RabbitMQ.
решение1
Для автоматического восстановления сервисов можно использовать monit
. Это довольно легкий и простой в использовании сервис.
Чтобы установить его в Debian, выполните:
sudo apt-get install monit
Как установить и настроить Monit
Что касается настройки, вы редактируете /etc/monit/monitrc
и перезапускаете службу.
Например, чтобы отслеживать, запущен ли демон и отвечает ли служба на соответствующих портах, а также настроить автоматическое восстановление для PostgreSQL, RabbitMQ и mongoDB:
check process postgres with pidfile /var/postgres/postmaster.pid group database start program = "/etc/init.d/postgresql start" stop program = "/etc/init.d/postgresql stop" if failed unixsocket /var/run/postgresql/.s.PGSQL.5432 protocol pgsql then restart if failed host 192.168.1.1 port 5432 protocol pgsql then restart check host mongodb with address localhost start program = "/usr/bin/sudo /opt/database/mongo/bin/mongod" stop program = "/usr/bin/sudo /usr/bin/pkill -f mongod" if failed port 28017 protocol HTTP request / with timeout 10 seconds then start check process rabbitmq-server with pidfile /var/run/rabbitmq.pid group rabbitmq start program "/etc/init.d/rabbitmq-server start" stop program "/etc/init.d/rabbitmq-server stop" if failed port 5672 type tcp then restart if 3 restarts within 3 cycles then timeout
Для получения дополнительной информации об услугах см.:Монит вики
Monit также позволяет отправлять электронное письмо в правилах и действовать в нагрузке сервера. Я бы посоветовал всем изучить его получше.
решение2
RedHat 6 используетвыскочкакак система инициализации.
Вам необходимо создать правильное определение init в /etc/init
(примечание: НЕ /etc/init.d
).
например (но может потребоваться отладка)/etc/init/myservice
start on runlevel [2345]
stop on runlevel [S016]
respawn
exec /code/to/program
Значение respawn
приведет program
к перезапуску в случае его завершения.