Показаны сообщения с ярлыком ssmtp. Показать все сообщения
Показаны сообщения с ярлыком ssmtp. Показать все сообщения

20 июл. 2000 г.

Язык bash часть 4 (ssmtp)

Резервное копирование домашней папки на getdropbox.com, плюс отсылка логов об этом себе на почту через gmail.com


Цель данной работы — создать архив домашней папки пользователя, положить данный архив в какую-либо локальную папку, скопировать архив в папку dropbox, послать на нужную почту отчет об этом факте, воспользовавшись для этого SMTP-сервером gmail.com.

Я это делаю в ubuntu, но принципиальные отличия для других дистрибутивов будут разве что в установке ssmtp, в остальном отличий быть не должно.


0. Заводим себе аккаунт на getdropbox.com. Кстати — если уж будете регистрироваться, пожалуста, вспользуйтесь моей ссылкой:
getdropbox.com. Вам в этом случае сразу отпилят в виде бонуса +250 Мб (при регистрации «напрямую» этого не будет), и мне собственно — тоже, те же самые 250 Мб. Мелочь, а приятно — мегабайты лишними быть не могут.

1. Ставим ssmtp, при помощи которого будем отсылать почту:


root@sysadm-desktop:~# apt-get install ssmtp -y


2. Идем на gmail.com и заводим там себе аккаунт. У нас будет robot@gmail.com.
3. Идем в свою домашнюю папку, и смотрим, что нам нужно бэкапить, а что нет. В соответствии с этим составляем команду для архиватора. У меня вышло вот что:


tar czvf /tmp/sysadm.tar.gz /home/sysadm/.* /home/sysadm/* --exclude=.gvfs --exclude=В\ плеер --exclude=Видео --exclude=Nexuiz --exclude=VBox --exclude=video --exclude=. --exclude=.. --exclude=/home/sysadm/.thumbnails/

Я наисключал некоторые каталоги, которые слишком объемные, и данные из них в резервном копировании не нуждаются.

Запускаем, смотрим как оно отработало.


4. Настраиваем ssmtp.

root@sysadm-desktop:~# cat /etc/ssmtp/ssmtp.conf 
root=robot@gmail.com
mailhub=smtp.gmail.com:587
hostname=smtp.gmail.com:587
UseSTARTTLS=YESAuthUser=robot@gmail.comAuthPass=yarobotFromLineOverride=YES

root@sysadm-desktop:~# cat /etc/ssmtp/revaliases 
root:robot@gmail.com:smtp.gmail.com:587
sysadm:robot@gmail.com:smtp.gmail.com:587


В файле /etc/ssmtp/revaliases я описал двоих пользователей — от root будем выполнять собственно всю работу через crontab, а для sysadm — для проверки, ну и просто — пусть будет.

5. Проверяем, как все фурычит:


root@sysadm-desktop:~# echo "Test" | ssmtp sysadm@gmail.com


Идем в почтовый ящик sysadm@gmail.com, и в папке «Спам» находим свое письмо. Если находим — то все отлично работает! Что бы такие письма не попадали в спам, нужно создать фильтр, и применять на письма от robot@gmail.com какой-нибудь ярлык.

6. Пишем скрипт для всего того, что мы обозначили в самом начале.


root@sysadm-desktop:~# cat /etc/cron.daily/arc_sysadm 
#!/bin/bash

home_dir=/home/sysadm
tmp_dir=/home/sysadm/files
arc_dir=/home/sysadm/Dropbox/backups
arc_name=sysadm_backup.tar.gz
log=/root/log_arc.log
log_tar=/root/log_tar.log
log_tar_error=/root/log_tar_error.log
log_mail=/root/log_mail.log
# --------------------------------------------------------

echo_log ()
{
echo $(date '+%d-%m-%y %H:%M:%S') $1
echo $(date '+%d-%m-%y %H:%M:%S') $1 >> $log}
# --------------------------------------------------------

echo > $log
echo > $log_tar
echo > $log_mail
echo > $log_tar_error

echo_log "Резервное копирование начинается"


echo_log "home_dir="$home_dir
echo_log "tmp_dir="$tmp_dir
echo_log "arc_dir="$arc_dir
echo_log "arc_name="$arc_name
echo_log "log="$log
echo_log "log_tar="$log_tar
echo_log "log_tar_error="$log_tar_error
echo_log "log_mail="$log_mail

tar czvf $tmp_dir/$arc_name $home_dir/.* $home_dir/* --exclude=.gvfs --exclude=В\ плеер --exclude=Видео --exclude=Nexuiz --exclude=VBox --exclude=video --exclude=. --exclude=.. --exclude=/home/sysadm/.thumbnails/ 1>> $log_tar 2>> $log_tar_error

echo_log "Резервное копирование закончено"

echo "Subject: Резервное копирование домашней папки sysadm" >> $log_mail
echo >> $log_mail
cat $log >> $log_mail
echo >> $log_mail

echo === Error-лог tar-а: ================================ >> $log_mail
echo >> $log_mail
cat $log_tar_error >> $log_mail
echo >> $log_mail

echo === Лог tar-а: ===================================== >> $log_mail
cat $log_tar >> $log_mail

cat $log_mail | ssmtp sysadm@gmail.com

rm -f $arc_dir/$arc_name
cp $tmp_dir/$arc_name $arc_dir/$arc_name


Поправить здесь нужно все переменные из самого начала под свою файловую структуру, и — вписать свою строку для архиватора, которую мы составили в п.3. Вроде больше ничего трогать не надо.

Не забываем сделать:


root@sysadm-desktop:~# chmod +x /etc/cron.daily/arc_sysadm 


Наш скрипт будет выполняться раз в сутки.

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