Резервное копирование домашней папки на getdropbox.com, плюс отсылка логов об этом себе на почту через gmail.com
Цель данной работы — создать архив домашней папки пользователя,
положить данный архив в какую-либо локальную папку, скопировать архив в
папку dropbox, послать на нужную почту отчет об этом факте,
воспользовавшись для этого SMTP-сервером gmail.com.
Я это делаю в ubuntu, но принципиальные отличия для других дистрибутивов будут разве что в установке ssmtp, в остальном отличий быть не должно.
0. Заводим себе аккаунт на getdropbox.com. Кстати — если уж будете регистрироваться, пожалуста, вспользуйтесь моей ссылкой: getdropbox.com. Вам в этом случае сразу отпилят в виде бонуса +250 Мб (при регистрации «напрямую» этого не будет), и мне собственно — тоже, те же самые 250 Мб. Мелочь, а приятно — мегабайты лишними быть не могут.
1. Ставим ssmtp, при помощи которого будем отсылать почту:
2. Идем на gmail.com и заводим там себе аккаунт. У нас будет robot@gmail.com.
3. Идем в свою домашнюю папку, и смотрим, что нам нужно бэкапить, а что нет. В соответствии с этим составляем команду для архиватора. У меня вышло вот что:
Я наисключал некоторые каталоги, которые слишком объемные, и данные из них в резервном копировании не нуждаются.
Запускаем, смотрим как оно отработало.
4. Настраиваем ssmtp.
В файле /etc/ssmtp/revaliases я описал двоих пользователей — от root будем выполнять собственно всю работу через crontab, а для sysadm — для проверки, ну и просто — пусть будет.
5. Проверяем, как все фурычит:
Идем в почтовый ящик sysadm@gmail.com, и в папке «Спам» находим свое письмо. Если находим — то все отлично работает! Что бы такие письма не попадали в спам, нужно создать фильтр, и применять на письма от robot@gmail.com какой-нибудь ярлык.
6. Пишем скрипт для всего того, что мы обозначили в самом начале.
Поправить здесь нужно все переменные из самого начала под свою файловую структуру, и — вписать свою строку для архиватора, которую мы составили в п.3. Вроде больше ничего трогать не надо.
Не забываем сделать:
Наш скрипт будет выполняться раз в сутки.
Имеем: раз в сутки производится выборочное архивирование домашней папки в два места: в локальный каталог и на сетевой ресурс dropbox, а отчет об этом факте падает на нужную почту.
Но кажется сдесь присутствующие не понимают как работает эта папочка "~/Dropbox"… Это же не файловая система, а тупо папка, поэтому свободное место там не посмотреть.
И еще вы забываете, что дропбох не удаляет файлы, когда вы их удаляете из этой папки или в вебморде самого дропбокса. Он их просто тупо скрывает, чтобы вы всегда могли их восстановить. Чтобы их удалить надо зайти в вебморду и выбрать режим «показывать удаленные файлы» (или как-то так), а потом уже удалять скрытые файлы. У меня как-то было, что залил я 3 файла по 600 метров, потом один удалил и решил залить другой, на гиг (у меня было 2.25 гига тогда), ан нифига, не вышло, места типа не хватает (через вебморду тогда лил). А вот когда этот скрытый файлик удалил, тогда все оке стало.
Хотя щас может уже и пофиксили, не знаю.
По скрипту (несколько «придирок»):
1. tmp_dir=/home/sysadm/files
Не понимаю, зачем временные файлы хранить в домашнем каталоге. Для них есть папка "/tmp". Просто так правильнее. А временные папки лучше делать так «tmp_dir=$(mktemp -d)», при этом папка т.ж. будет сразу создана и имя у нее будет уникальным.
2. Если мне не изменяет память, такая запись — "--exclude=file1;file2;path3" — тоже допустима (да и понятнее, имхо)
3. А нафига такой простенький скрипт выполнять от рута? Все можно сделать и от обычного пользователя! А в кроне можно задать имя юзера, от которого будет выполняться скрипт. Для этого в /etc/crontab надо добавить строку:
ЗЫЖ Есть классная команда «dropbox puburl ~/Dropbox/Public/FILE», которая возвращает URL к этому файлу ;)
ЗЗЫЖ В вики дропбокса есть скрипт на питоне Dropbox Linux CLI. У меня на убунте 9.04 и 8.10 он не заработал, ругался, что у меня плохой интерпретатор и он не может найти путь, хотя все другое работает на ура. Разбираться в чем дело не было времени. Упомянул я его потому, что мне что-то подсказывает, что через него можно будет узнать сколько места на дропбоксе осталось (хотя на все 100 сказать не могу).
Я это делаю в 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, а отчет об этом факте падает на нужную почту.
Но кажется сдесь присутствующие не понимают как работает эта папочка "~/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 сказать не могу).