20 Июл


2017

Скрипт автоматической отправки бекапов на email.

Решил написать скрипт для автоматической отправки бекапов с сервера, для этого буду юзать крон и mutt + самописный скрипт для создания бекапа из PostgreSQL. 

Начал я с настройки mutt, я не особо вижу смысл в подобных почтовых клиентах, но с первого знакомства, интерфейс был интуитивно понятен, управление достаточно простое, список писем удобночитаемый. Немного розница информация по начтройке, но в целом для gmail получилось нечто следующее(файл настроек лежит тут ~/.muttrc): 

Конфиг MUTT
set imap_user = <USERNAME>@gmail.com
set editor='nano'
set imap_pass = <PASSWORD>
set smtp_url = smtp://<LOGIN>@smtp.gmail.com:587/
set smtp_pass = <PASSWORD>
set from = "<EMAIL>”
set realname = "Darkawower”
set folder = imaps://imap.gmail.com:993
set spoolfile = +INBOX #or +[Gmail]/Important
set postponed = “+[Gmail]/Drafts”
set header_cache = ~/.mutt/cache/headers
set message_cachedir = ~/.mutt/cache/bodies
set certificate_file = ~/.mutt/certificates
set move = no
set smtp_authenticators = ‘gssapi:login’

Протестировать клиент можно командой: echo "Message from a console" | mutt -s 'Test msg' afiskon@example.ru

Чтобы отправить файл:

mutt -s "EMAIL SUBJECT" EMAIL -a FILE

ВАЖНО! теперь gmail требует вот это. Нужно подключать двухфакторную аунтификацию и добавлять специальный пароль в мутт. Либо дать доступ ненадежным приложениям.

Зная все это можно написать скрипт для создания бекапа (в моем случае postgresql, пример дампа которого, я разбирал ранее):

cd ~/backup/
pg_dump blogoneman | gzip > backup.gz
mutt -s Backup EMAIL -a backup.gz

Проверяем, на почту должен придти файл. Окей, осталось сделать так чтобы все это повторялось...скажем..раз в неделю, в пятницу например. Для этого создаем новую крон таблицу: crontab -e

...
SHELL=/bin/bash
MAILTO=""

0 0 * 5 * $HOME/bash/backup.sh

Формат даты в cron весьма своеобразен, его отлично описывает эта схема, сильно спертая отсюда

 * * * * *
| | | | | | 
| | | | | +--- Годы       (диапазон: 1900-3000)
| | | | +----- Дни недели (диапазон: 1-7)
| | | +------- Месяцы     (диапазон: 1-12)
| | +--------- Дни месяца (диапазон: 1-31)
| +----------- Часы       (диапазон: 0-23)
+------------- Минуты     (диапазон: 0-59)

Собственно на этом все, изначально хотел создавать новый файл в формате даты, однако это лишено смысла, т.к. это лишь схедает память сервера, а файлы всегда можно отсортировать по дате в вашем почтовом ящике.

SQL
devops
web
Bash