Иногда сервис падает один раз - это нормально. Но если он падает 10 раз за минуту, бесконечный Restart=always только усугубляет проблему.
Задача: перезапускать сервис только если он упал больше N раз за период.
1️⃣ Считаем падения через systemd. У systemd есть счетчик рестартов:
systemctl show nginx -p NRestarts
Вывод:
NRestarts=3
2️⃣ Простая логика в bash
SERVICE=nginx
LIMIT=5
restarts=$(systemctl show "$SERVICE" -p NRestarts --value)
if (( restarts >= LIMIT )); then
echo "Сервис падал $restarts раз — перезапуск"
systemctl restart "$SERVICE"
else
echo "Падений мало ($restarts) — не трогаем"
fi
▪️ Учитываем период времени
Счетчик накапливается с момента запуска systemd.
Чтобы учитывать последний час, можно смотреть journal:
journalctl -u nginx --since "1 hour ago" | grep -c "Started"
Или искать Main process exited.
BashTex 📱 #bash #utils