Если сегдня не был создан snapshot - высылаю уведомление в телеграмм.
Создать файл .env
BOT_TOKEN=18045447450203:AAGEjU7HKEEGle1Zv2an5sVF49QxNxhw03w CHAT_ID=33109821804 |
Высылаю лог файл по вторинкам в любом случае
cat /root/check_snapstots_today.sh
Внимание # --- Теги для проверки ---
#!/bin/bash
# --- Настройки подключения SFTP ---
PORT=2222
REMOTE_HOST="srv.pp.ua"
REMOTE_USER="root"
REMOTE_PATH="/mnt/company/restic/"
SSH_KEY_PATH="/root/.ssh/company_key"
RESTIC_PASSWORD_FILE="/root/restic-password.txt"
EMAIL_REPORT=report@company.ua
export RESTIC_PASSWORD_FILE="/root/restic-password.txt"
# --- Теги для проверки ---
TAGS=("1c" "custom" "Svetlana" "glbuh")
# --- Telegram ---
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/.env" # BOT_TOKEN, CHAT_ID
# --- IP для уведомлений ---
IP_local=$(ip -4 -br a | grep UP | awk '{print $3}')
IP_global=$(curl -s ifconfig.me)
# --- Логирование ---
LOG_FILE=/var/log/restic_spetscontract.log
TODAY=$(date +%F)
echo "TODAY is $TODAY" > "$LOG_FILE"
exec > >(tee -a "$LOG_FILE") 2>&1
# --- Путь к репозиторию SFTP + ключ и порт ---
RESTIC_REPO="sftp:${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}"
RESTIC_SFTP_OPTS="sftp.command=ssh -p ${PORT} -i ${SSH_KEY_PATH} -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} -s sftp"
# --- Функция вывода снапшотов по тегу ---
show_snapshots_by_tag() {
local tag="$1"
echo "------- ${tag} ---------------"
restic -r "$RESTIC_REPO" -o "$RESTIC_SFTP_OPTS" snapshots --tag="$tag"
}
echo "==================== $REMOTE_HOST ====================="
# --- Вывод снапшотов по тегам ---
for tag in "${TAGS[@]}"; do
show_snapshots_by_tag "$tag"
done
# --- Отображение снапшотов за сегодня ---
echo "==================== $TODAY ==========================="
restic -r "$RESTIC_REPO" -o "$RESTIC_SFTP_OPTS" snapshots | grep "$TODAY"
# --- Проверка наличия снапшота за сегодня ---
echo "=== Проверка наличия снапшота за $TODAY ==="
SNAPSHOT_TODAY=$(restic -r "$RESTIC_REPO" -o "$RESTIC_SFTP_OPTS" snapshots | grep "$TODAY")
if [[ -n "$SNAPSHOT_TODAY" ]]; then
echo "✅ Снапшот за $TODAY найден:"
echo "$SNAPSHOT_TODAY"
else
echo "⚠️ Снапшот за $TODAY не найден!"
echo "Результат: ПРОБЛЕМА — нет снапшота за $TODAY"
MESSAGE="⚠️ Restic: сегодня ($TODAY) не создан снапшот в репозитории ${RESTIC_REPO}
LAN: $IP_local
WAN: $IP_global
$0"
curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" \
-d chat_id="$CHAT_ID" \
-d text="$MESSAGE"
fi
# --- Статистика ---
echo "=== Статистика snapshot ==="
restic -r "$RESTIC_REPO" -o "$RESTIC_SFTP_OPTS" stats
echo "=== Статистика snapshot (raw-data) ==="
restic -r "$RESTIC_REPO" -o "$RESTIC_SFTP_OPTS" stats --mode raw-data
echo "------------------------"
echo "$IP_local"
echo "$IP_global"
echo "$0"
# Отправить лог по вторникам
# Получаем номер дня недели: 2 — вторник (1 — понедельник, 7 — воскресенье)
DOW=$(date +%u)
if [[ "$DOW" -eq 2 ]]; then
echo "Вторник. Высылаю отчет на $EMAIL_REPORT "
mutt -s "Company log restic" -- "$EMAIL_REPORT" < "$LOG_FILE"
else
echo "Сегодня не вторник. Отчет не высылаю"
fi
exit 0
|
[Unit] Description= check snapstots today After=network.target [Service] Type=oneshot ExecStart=/root/check_snapstots_today.sh WorkingDirectory=/root Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" Environment="HOME=/root" Environment="XDG_CACHE_HOME=/root/.cache" [Install] WantedBy=multi-user.target |
[Unit] Description= check snapstots today [Timer] OnBootSec=1m OnCalendar=*-*-* 11:33:00 [Install] WantedBy=timers.target |
или
OnCalendar=Mon..Fri *-*-* 10:33:00
systemctl daemon-reload systemctl start check_snapstots_today.timer systemctl enable check_snapstots_today.timer systemctl list-timers --all | grep check_snapstots_today.service |
Если таймер не отображается, то - «жёсткая перезагрузка» самого процесса systemd (PID 1)
systemctl daemon-reexec