У меня есть некоторое программное обеспечение (консул), который работает как агент в фоновом режиме, и я хочу удостовериться его выполнение в любом случае. Это - команда, которую я использую для запуска агента:
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 &
консул все еще иногда перестанет работать.
Это было просто решением, которое я создал, но я определенно знаю не лучшее решение, которое я мог использовать. Что лучший способ состоит в том, чтобы проверить и обеспечить, чтобы этот процесс всегда работал?