Лучшие практики для автоматического перезапуска сбойных фоновых процессов?

У меня есть какое-то программное обеспечение (консул), которое работает в качестве агента в фоновом режиме, и я хочу убедиться, что оно работает постоянно. Это команда, которую я использую для запуска агента:

nohup consul agent -server -bootstrap-expect 1 \
-data-dir /tmp/consul \
-bind=$(hostname -i) \
-client=0.0.0.0 \
-node=$(hostname) \
-config-dir /etc/consul.d \
-ui-dir /opt/consul/ &

Прямо сейчас у меня есть проверка, которая проходит в /etc/rc.local:

#!/bin/sh -e
while true; do
    if [ -z "$(ps aux | grep "consul agent" | grep -v grep)" ]; then 
        sh /etc/rc.local2; 
    fi;
    sleep 3;
done
exit 0

Если агент консула когда-либо останавливается, то /etc/rc.local2 запускается, что работает:

#!/bin/sh -e
nohup consul agent -server -bootstrap-expect 1 \
-data-dir /tmp/consul \
-bind=$(hostname -i) \
-client=0.0.0.0 \
-node=$(hostname) \
-config-dir /etc/consul.d \
-ui-dir /opt/consul/ &

exit 0

Эта система работает, проблема в том, что она требует, чтобы серверы, которые я предоставляю (на всех запущены различные другие формы серверов и клиентов консулов), были перезапущены, прежде чем это действительно вступит в силу. Даже если я бегу sudo nohup /etc/rc.local & консул все равно иногда терпит неудачу.

Это было просто решение, которое я создал, но я точно знаю, что это не лучшее решение, которое я мог бы использовать. Как лучше всего проверить и убедиться, что этот процесс всегда запущен?

0 ответов

Другие вопросы по тегам