Если ваши серверные бэкапы могут вместиться в размер виртуального диска Dropbox’a, то думаю что разумным будет бэкапить файлы, помимо другого веника, ещё и в облако.
Начнём.
Скачиваем с официального сайта дистрибутив для командной строки (в моём случаи архитектура процессора х64, для иных процессоров вот ссылка)
sudo su
cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
Перемещаем Dropbox из домашней папки вон:
mv .dropbox-dist /usr/local/lib/dropbox && chown -R root:root /usr/local/lib/dropbox
Запускаем в первый раз Dropbox руками:
/usr/local/lib/dropbox/dropboxd
Видим такое:
This client is not linked to any account...
Please visit https://www.dropbox.com/cli_link?host_id=2dc73ba6a3aXXXX to link this machine.
Открываем ссылку в браузере, вводим пароль и присоединяем сервер к нашему Dropbox-аккаунту.
После чего в консоли видим
Client successfully linked, Welcome Roman!
Ждём пока все файлы перетянутся из Dropbox’a в папку, иначе будут «бока».
Когда всё завершится — останавливаем процесс нажатием CTRL+C
В домашней директории создалась папка ~/Dropbox/
и подтянулись мои файлы.
Поскольку мне это дело в домашней папке не нужно — я переношу саму папку, за которой следит Dropbox-демон в другое место, оставляя только сим-линк (в моём случаи — /var/__dropbox
)
mkdir /var/__dropbox
mv ~/Dropbox/* Dropbox/.d* /var/__dropbox/
rm -Rf ~/Dropbox && ln -s /var/__dropbox ~/Dropbox
Теперь установим Dropbox в качестве сервиса.
Для этого создаём файл /etc/init.d/dropbox
с таким содержанием:
### BEGIN INIT INFO
# Provides: dropbox
# Required-Start: $local_fs $remote_fs $network $syslog $named
# Required-Stop: $local_fs $remote_fs $network $syslog $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: false
# Short-Description: dropbox service
### END INIT INFO
#!/bin/sh
start() {
echo "Starting dropbox..."
HOME="/root/" start-stop-daemon -b -o -c root -S -u root -x /usr/local/lib/dropbox/dropbox
}
stop() {
echo "Stopping dropbox..."
start-stop-daemon -o -c root -K -u root -x /usr/local/lib/dropbox/dropbox
}
status() {
dbpid=$(pgrep -u root dropbox)
if [ -z $dbpid ] ; then
echo "dropbox not running."
else
echo "dropbox running."
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload|force-reload)
stop
start
;;
status)
status
;;
*)
echo "Usage: /etc/init.d/dropbox {start|stop|reload|force-reload|restart|status}"
exit 1
esac
exit 0
Обратите внимание, что я буду запускать Dropbox от пользователя root
, поэтому я устанавливаю ему HOME="/root/"
перед запуском демона, для того, чтобы демон понимал где лежат настройки.
Устанавливаем скрипту запуска правильные права
chmod +x /etc/init.d/dropbox
Добавляем в автозагрузку
update-rc.d dropbox defaults
И наконец-то запускаем:
/etc/init.d/dropbox start
Опционально. Есть инструмент на Питоне для отображения текущего статуса работы демона (копирование, простой и пр.)
Если интересует — загружаем его и устанавливаем ему права, иначе — переходим дальше.
wget -O /usr/local/lib/dropbox/dropbox.py "https://www.dropbox.com/download?dl=packages/dropbox.py"
chmod 755 /usr/local/lib/dropbox/dropbox.py
Теперь мы можем смотреть чем занимается демон с помощью команды
/usr/local/lib/dropbox/dropbox.py status
Осталось последнее — написать скрипт, что будет копировать файлы в нашу папку прямо в облако.
Для этого мы будем использовать любимый rsync
.
#!/bin/sh
HOST=$(hostname)
SOURCE_DIR="/var/__backup"
DROPBOX_DIR="/var/__dropbox"
/usr/bin/rsync -avz --delete $SOURCE_DIR $DROPBOX_DIR/$HOST/$SOURCE_DIR;
Вот. Теперь папка /var/__backup
будет в полном объеме уезжать в облако Dropbox’a (в папку /<имя_сервера>
, что удобно, когда есть более одного сервера).
Ставим запуск этого скрипта каждый день, после выполнения всех бэкапов на сервере (у меня это 5 утра).
vi /etc/crontab
0 5 * * * root /var/__backup/__scripts/backup_to_dropbox.sh > /dev/null 2>&1