logo

nixscript

Keep it simple, stupid !

Ссылка на статью в формате MarkDown для Curl, кодировка RU.UTF-8

Оповещение о бекапах

Адрес статьи: nixscript.ru/notify-backup

Когда бекап сохраняется на сетевой диск, не всегда всё идёт гладко. Может сеть отвалиться, или компьютер зависнет, или кто-то кривыми ручками всё сломает... В моём случае, вынь ХР не всегда корректно отрабатывает.

Для решения можно сделать простенький скрипт и запускать его любым рациональным способом. К примеру, закинуть задачу в Cron, на выполнение сразу после отработки бекапа. Или на запуск компьютера, в автозапуске скриптов.

Поиск бекапа

Сначала надо его правильно найти. Как правило, в имя файла указывается дата (возможно и время), если бекап делается автоматически. Если это так, то нужно повторить формирование имени.

BACKUP_SERVER="192.168.2.2"
BACKUP_USER="admin"
BACKUP_PATH="/home/archives/"
BACKUP_NAME=$(date +%d.%m.%Y)"-database.7z"

Теперь у нас есть нужные параметры. Имя бекапа формируется из текущей даты в формате дд.мм.гггг. Можно добавить время, какие-то другие варианты, в конечном итоге, формирование имени должно выдать строку полностью совпадающую с именем бекапа, который мы должны найти на диске. В данном примере, имя будет типа 12.01.2020-database.7z.

Для способа уведомления есть несколько вариантов:

Я рассматриваю два первых варианта, поскольку они мне доступны и хорошо известны.

Электронная почта

Для отправки уведомления на электронную почту, необходимо установить два пакета:

Теперь можно продолжить со скриптом.

if ssh $BACKUP_USER@$BACKUP_SERVER [ -f "$BACKUP_PATH$BACKUP_NAME" ]
then
    echo "Ok"
    echo "$BACKUP_NAME status Ok" | mutt -s "Backup is Ok" admin@mail.ru
else
    echo "Fail"
    echo "$BACKUP_NAME is not created" | mutt -s "Backup Failed" admin@mail.ru
fi

Текст в письме проще сделать на английском или просто латиницей, иначе придётся указывать кодировку, искать как это правильно сделать... не хочу 😁

Соединим обе части, получится нужный нам скрипт.

#!/bin/bash
BACKUP_SERVER="192.168.2.2"
BACKUP_USER="admin"
BACKUP_PATH="/home/archives/"
BACKUP_NAME=$(date +%d.%m.%Y)"-database.7z"

if ssh $BACKUP_USER@$BACKUP_SERVER [ -f "$BACKUP_PATH$BACKUP_NAME" ]
then
    echo "Ok"
    echo "$BACKUP_NAME status Ok" | mutt -s "Backup is Ok" admin@mail.ru
else
    echo "Fail"
    echo "$BACKUP_NAME is not created" | mutt -s "Backup Failed" admin@mail.ru
fi

Termux

Если рассматривать этот вариант, скрипт можно сделать прямо для смартфона, чтобы было проще.

Важный момент! Если скрипт будет срабатывать на смартфоне, к серверу хранения бекапов должен быть доступ из Интернет. То есть, должен быть правильно настроен роутер и статический белый IP, иначе ничего не получится.

Функциональная часть скрипта будет следующей:

#!/bin/bash
BACKUP_SERVER="192.168.2.2"
BACKUP_SERVER_PORT=8022 # Номер порта должен быть настроен в роутере.
# Не рекомендую на внешку оставлять 22 или 8022 порт. Используйте другие, чтобы избежать взлома.
BACKUP_USER="admin"
BACKUP_PATH="/home/archives/"
BACKUP_NAME=$(date +%d.%m.%Y)"-database.7z"

if ssh -p $BACKUP_SERVER_PORT $BACKUP_USER@$BACKUP_SERVER [ -f "$BACKUP_PATH$BACKUP_NAME" ]
then
    termux-notification -c "Бекап забекапился нормально" --priority low
else
    termux-notification -c "Бекап нихрена не забекапился" --sound --priority high
fi

Скрипт готов, теперь надо его прикрутить в Termux так, чтобы он стартовал при запуске. Для этого проще использовать Cron. Так же как и в обычном Linux, Cron запускается командой crond, а задачи добавляются командой crontab -e. Сделаем это.

crontab -e
---------------------------------------
# s m h d M command
* * 1 * * /data/data/com.termux/files/home/bin/check_backup.sh

Важно указать полный путь к скрипту. При этом имейте ввиду, в Termux директория home находится здесь: /data/data/com.termux/files/home

В примере я задал выполнение на час ночи каждый день. Теперь надо обеспечить запуск Cron при запуске Termux. Для этого в .bashrc надо добавить следующее.


Статья написана в формате MarkDown и сконвертирована в HTML с помощью скрипта Parsedown.

Вверх 🡑