howtoРезервное копирование домашней папки на 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=YES
AuthUser=robot@gmail.com
AuthPass=yarobot
FromLineOverride=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, а отчет об этом факте падает на нужную почту.

Комментарии (11)

на Дропбокс хорошо, если канал аплоада(upload) большой. Помню, один раза заливал бэкап файлов Firefox, так это было минимум минут 40. И, кстати, придется периодически все удалять. 2 гига(+ реферальские 250 метров ) — не так уж и много.
У меня там в конце
rm -f $arc_dir/$arc_name
cp $tmp_dir/$arc_name $arc_dir/$arc_name

как раз по причине ограниченности места… Бэкап хранится один день, потом удаляется и на его место переписывается новый.
Кстати, это место мне не нравится тем, что сначала мы удаляем архив с дропбокса, потом — начинаем переписывать. А на момент переписывания мы остаемся без архива вообще, и если случиться что-нибудь непредвиденное, типа пропадания инета, то мы остаемся без бэкапа. Надо это место как-то покультурнее сделать.
Ну, как я понимаю, сначала бэкапимся в локальную папку — значит какой-то бэкап уже есть. Потом просто проверяем, есть достаточное количество свободного места в Дропбоксе или нет. Если есть, то сначала заливаем бэкап, потом удаляем старый, если же нет, то… тут уже надо подумать. Конечно, можно оставить как сейчас, но можно и поломать мозг, на случай чего-нибудь форс мажорного.
да. наверно надо в две ступени — сначала записать новый архив, потом удалить старый.
единственное — не так просто оказалось из скрипта получить свободное место на дропбоксе, df тут не канает. кстати даже не знаю реально ли это реализовать, ведь дропбоксовый софт — типично гуевый.
Эмм, так можно же просто смотреть свободное в папке для Дропбокса или так не получится из скрипта?
из скрипта я без понятия как. может и можно — но пока не приходит ничего в голову.
А по времени — да, может быть продолжительно, особенно если архив выходит под два гига. Надо на ночь планировать такие вещи, будет незаметно…
зависимость от наутилуса не радует совсем…
Отличная статья, переместите в блог howto.
Видно, что аффтар старался, молодец!!!

Но кажется сдесь присутствующие не понимают как работает эта папочка "~/Dropbox"… Это же не файловая система, а тупо папка, поэтому свободное место там не посмотреть.
И еще вы забываете, что дропбох не удаляет файлы, когда вы их удаляете из этой папки или в вебморде самого дропбокса. Он их просто тупо скрывает, чтобы вы всегда могли их восстановить. Чтобы их удалить надо зайти в вебморду и выбрать режим «показывать удаленные файлы» (или как-то так), а потом уже удалять скрытые файлы. У меня как-то было, что залил я 3 файла по 600 метров, потом один удалил и решил залить другой, на гиг (у меня было 2.25 гига тогда), ан нифига, не вышло, места типа не хватает (через вебморду тогда лил). А вот когда этот скрытый файлик удалил, тогда все оке стало.
Хотя щас может уже и пофиксили, не знаю.

По скрипту (несколько «придирок»):
1. tmp_dir=/home/sysadm/files
Не понимаю, зачем временные файлы хранить в домашнем каталоге. Для них есть папка "/tmp". Просто так правильнее. А временные папки лучше делать так «tmp_dir=$(mktemp -d)», при этом папка т.ж. будет сразу создана и имя у нее будет уникальным.

2. Если мне не изменяет память, такая запись — "--exclude=file1;file2;path3" — тоже допустима (да и понятнее, имхо)

3. А нафига такой простенький скрипт выполнять от рута? Все можно сделать и от обычного пользователя! А в кроне можно задать имя юзера, от которого будет выполняться скрипт. Для этого в /etc/crontab надо добавить строку:
00 01   * * *   sysadm     /path/to/arc_sysadm
Теперь скрипт будет работать от юзера sysadm и запускаться каждый день в час ночи.

ЗЫЖ Есть классная команда «dropbox puburl ~/Dropbox/Public/FILE», которая возвращает URL к этому файлу ;)
ЗЗЫЖ В вики дропбокса есть скрипт на питоне Dropbox Linux CLI. У меня на убунте 9.04 и 8.10 он не заработал, ругался, что у меня плохой интерпретатор и он не может найти путь, хотя все другое работает на ура. Разбираться в чем дело не было времени. Упомянул я его потому, что мне что-то подсказывает, что через него можно будет узнать сколько места на дропбоксе осталось (хотя на все 100 сказать не могу).
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.