Иногда нужен не Zabbix, а простейший контроль жив или нет. Для HTTP-сервисов это легко решается связкой
curl + systemctl.▪️ Базовая проверка доступности
curl -sf http://127.0.0.1:8080/health || echo "DOWN"
-s - тихо
-f - ошибка, если HTTP ≠ 2xx
exit-код ≠ 0 - сервис недоступен
▪️ Автоперезапуск сервиса
SERVICE=myapp
URL=http://127.0.0.1:8080/health
if ! curl -sf --max-time 3 "$URL"; then
logger "watchdog: $SERVICE is down, restarting"
systemctl restart "$SERVICE"
fi
--max-time защищает от зависших запросовlogger пишет в syslog (удобно для аудита)▪️ Защита от флаппинга (несколько неудач подряд)
FAILS=/run/myapp.watchdog.fail
MAX=3
if ! curl -sf "$URL"; then
n=$(($(cat "$FAILS" 2>/dev/null || echo 0)+1))
echo "$n" > "$FAILS"
[[ $n -ge $MAX ]] && systemctl restart "$SERVICE"
else
rm -f "$FAILS"
fi
Рестарт только если сервис падает несколько раз подряд.
▪️ Запуск по cron
*/1 * * * * /usr/local/bin/watchdog.sh
BashTex 📱 #bash #utils