Сторож смотрит на результат, а не на запуск

Скрипт может тихо перестать работать, и крон об этом не скажет. Проверяйте, что появился свежий результат.

1 мин чтенияинфраструктурабэкапымониторинг

Ночной бэкап запускается кроном. Однажды у скрипта пропадает право на запуск: крон получает «Permission denied», вывод уходит в никуда, и бэкапов нет. Никто не узнает об этом, пока бэкап не понадобится.

Проверять код возврата скрипта бесполезно - скрипт вообще не запускался. Проверять нужно результат: есть ли в хранилище свежий файл.

#!/usr/bin/env bash
# Сторож: тревога, если свежему дампу в бакете больше 26 часов.
set -euo pipefail

latest=$(s3cmd ls s3://backups/ | sort | tail -1 | awk '{print $1" "$2}')

if [[ -z "$latest" ]]; then
  msg="Бэкапов в бакете нет совсем"
else
  age_h=$(( ($(date +%s) - $(date -d "$latest" +%s)) / 3600 ))
  (( age_h > 26 )) && msg="Бэкап не обновлялся: $age_h ч" || msg=""
fi

if [[ -n "$msg" ]]; then
  curl -fsS -X POST "$ALERT_URL" --data-urlencode "text=$msg"
fi

26 часов, а не 24 - чтобы долгий дамп или сдвиг расписания не будили зря.

Тот же принцип годится для всего, что работает по расписанию: выгрузки, синки, отчеты. Сторож спрашивает не «запустилось ли», а «есть ли свежее».

Esc

↑↓ выбор Enter открыть