
Ссылка на статью в формате 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.
Для способа уведомления есть несколько вариантов:
- На электронную почту
- На смартфон посредством Termux + Termux-API
- Любой другой доступный вариант, хоть в соц.сеть, хоть по смс (если есть необходимое оборудование).
Я рассматриваю два первых варианта, поскольку они мне доступны и хорошо известны.
Электронная почта
Для отправки уведомления на электронную почту, необходимо установить два пакета:
- mail-utils
- mutt
Теперь можно продолжить со скриптом.
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.