Архивирование на Яндекс.Диск автоматоматически

Исходные данные

Есть локальный и удалённый компьютеры. Оба работают под управлением Fedora (может быть любые другие Linux). На удалённом компьютере есть папка, с которой часто производится работа на локальном компьютере и поэтому для её сохранности нужно периодически копировать (архивировать) в защищённом виде (копировать будем на Яндекс.Диск). На удалённом компьютере настроен NFS сервер на нужную папку. На локальном компьютере настроено автоматическое монтирование Яндекс.Диска (по инструкции из статьи с Хабра Автозапуск Яндекс.Диска как службы systemd в Fedora 19) и удалённого раздела: в файле /etc/fstab (здесь и ниже во вставках обратным слэшем обозначается отбивка строки - в реальном файле нужно писать в одну строку):

...
192.168.0.112:/home/gravis/work /mnt/storage/Документы nfs \
defaults 0 0
В оригинальной инструкции подключения Яндекс.Диска я только заменил в файле /usr/lib/systemd/system/yandex-disk.service Requires=network.target на After=network.target. Это даёт нормальную загрузку сервиса.
Для того, чтобы директория на удалённом компьютере стала доступна по NFS, подредактируем (добавим строчку) там /etc/exports:

/home/gravis/Документы 192.168.0.100/24(rw,sync,no_root_squash)
Т.е. указываем видимость в локальной сети и правила доступа. После изменения документа перезапускаем службу и проверяем (от root):

systemctl restart nfs.service
systemctl status nfs.service
Для настройки SELinux на директории для монтрирования NFS на локальном компьютере выполним (от root):

semanage fcontext -a -t nfs_t "/mnt/storage/Документы(/.*)?"
restorecon -R /mnt/storage/Документы
Так же поставим владельцем этой директории локального пользователя. При следующей загрузке удалённый NFS раздел должен подмонтироваться в локальную директорию. Для удобства можно занести директорию в закладки Nautilus: перейти в директорию и нажать Ctrl + D

Скрипт для защищённого архивирования

Создал файл скрипта, который делает архив: /usr/local/bin/archdoc. Тут укажем откуда и куда копировать и пароль для шифрования:

#!/bin/bash
# Изменим среду исполнения,т.к. запуск будет из службы
source /root/.bash_profile
# Задаём место источника для бэкапа.
# В конце слэш, чтоб не создалась подпапка
# Source="/mnt/storage/Документы/"
# Задаём место, куда будет складываться архив
# Destination="file///mnt/yandex-disk/АрхивДокументов"
# С кириллицей вышла проблема, поэтому приложил костыль:
LC_ALL=en_US.UTF-8 PASSPHRASE=somestrongpass duplicity \
/mnt/storage/Документы/ \
file///mnt/yandex-disk/АрхивДокументов
Установим права на файл 100755, владелеца оставим root.
В директории /etc/systemd/system создаём два файла:
1) backup-work.timer (определяет, когда наш сервис будет запускаться):

[Unit]
Description=Runs backup doc every hour
[Timer]
# Time to wait after booting before we run first time
OnBootSec=20min
# Time between running each consecutive time
OnUnitActiveSec=1h
Unit=archdoc.service
[Install]
WantedBy=multi-user.target
2) backup-work.service (описание сервиса):

[Unit]
Description=BackupDocs
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/archdoc
Активируем и запускаем таймер (от root):

systemctl enable archdoc.timer
systemctl start archdoc.timer
Сервис будет каждый час делать шифрование и архивирование документов на Яндекс.Диск, а начнёт через 20 минут после загрузки компьютера. Через некоторое время можно проверить статус сервиса, чтобы убедиться, что всё работает (от root):

systemctl status archdoc.service

Комментарии

Популярные сообщения из этого блога

Пропорциональное распределение суммы

Битрикс: своя геолокация

Bitrix24 API - разбор демо приложения третьего типа