Backup с помощью systemd вместо cron

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

Есть локальный и удалённый компьютеры. Оба работают под управлением Fedora (может быть любые другие Linux). На удалённом компьютере есть папка, которую нужно периодически копировать (синхронизировать) на локальный компьютер. На удалённом компьютере настроен NFS сервер на нужную папку. Копировать нужно на раздел с NTFS (да, так исторически сложилось) на локальном компьютере. На локальном компьютере настроено автоматическое монтирование нужного раздела с NTFS и удалённого раздела: в файле /etc/fstab:

...
UUID=2CB4C090B4C05DC8 /mnt/backup ntfs-3g defaults 0 0
192.168.0.112:/home/gravis/work /mnt/storage/work nfs defaults 0 0

Тут UUID - номер интересующего меня раздела с NTFS; /mnt/backup - заранее созданная директория, куда будут делаться бэкапы; при монтировании NFS указан адрес сервера и путь к интересующей директории на нём, а так же заранее созданная директория, откуда будут браться данные для бэкапа.

SELinux

Естесственно, SELinux не отключаем, но включаем разрешения на интересующие нас вещи. Имеется в виду локальный компьютер. У меня получилось так (можно бы сделать по-лучше, более безопасно). Показываю свой вывод значений политик по NFS и rsync (команда getsebool -a | grep nfs и getsebool -a | grep rsync):

cobbler_use_nfs --> off
ftpd_use_nfs --> off
git_cgi_use_nfs --> off
git_system_use_nfs --> off
httpd_use_nfs --> off
ksmtuned_use_nfs --> off
logrotate_use_nfs --> off
mpd_use_nfs --> off
nfs_export_all_ro --> on
nfs_export_all_rw --> on
nfsd_anon_write --> off
openshift_use_nfs --> off
polipo_use_nfs --> off
samba_share_nfs --> off
sanlock_use_nfs --> off
sge_use_nfs --> off
use_nfs_home_dirs --> off
virt_use_nfs --> off
xen_use_nfs --> off

postgresql_can_rsync --> off
rsync_anon_write --> on
rsync_client --> off
rsync_export_all_ro --> off
rsync_full_access --> on

Нужные значения устанавливаются командой в консоли, например, так (от имени root):

setsebool -P allow_rsync_anon_write=1

Rsync скрипт

Создал файл скрипта, который делает бэкап: /usr/local/bin/backup_work

#!/bin/bash
# Изменим среду исполнения,т.к. запуск будет из службы
source /root/.bash_profile
# Задаём место источника для бэкапа.
# В конце слэш, чтоб не создалась подпапка
Source="/mnt/storage/work/"
# Задаём место, куда будет складываться бэкап
Destination="/mnt/backup/Work"
# Сам бэкап. Ключи ar позволяют пройтись по вложенным папкам и
# сохранить метаданные файлов
# (дата создания, права и пр.), параметр delete удаляет в бэкапе
# файлы, которые были удалены в источнике
rsync -ar --delete $Source $Destinition
Права на файл 100755, владелец root, контекст SELinux unconfined_u:object_r:bin_t:s0

Systemd

В директории /etc/systemd/system создаём два файла: backup-work.timer (определяет, когда наш сервис будет запускаться) и backup-work.service (описание сервиса).
Содержимое первого файла:

[Unit]
Description=Runs backup work every hour
[Timer]
# Time to wait after booting before we run first time
OnBootSec=10min
# Time between running each consecutive time
OnUnitActiveSec=1h
Unit=backup-work.service
[Install]
WantedBy=multi-user.target

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

Второй файл:

[Unit]
Description=BackupWork
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/backup_work
Тут просто указывается наш скрипт, который и делает всю необходимую работу. Всё рабочая синхронизация работает. Теперь если с удалённым компьютером что-то случится, можно будет переключиться на локальную копию нужной директории. Это не совсем бэкап, но определённо не лишняя возможность.
Активируется таймер командой:

systemctl enable backup-work.timer
Действия вступят после перезагрузки или можно сразу запустить командой:

systemctl start backup-work.timer
Если изменять файлы timer и service после их сохранения, то перед их перезапуском понадобится выполнить команду:

systemctl daemon-reload
Статус нашего сервиса и таймера можно посмотреть командами:

systemctl status backup-work.service -l
и

systemctl --full | grep backup-work




Комментарии

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

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

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

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