Публикация содержит описание решения частной задачи автоматизации процесса резервирования данных в облачное хранилище.
Имеется каталог, содержащий определённое количество файлов, подлежащий резервированию в облако. Данный каталог может быть в течение суток изменён или не изменён. Ставится задача запуска его синхронизации с облаком только в случае его изменения.
Синхронизация с облаком реализована через сценарий (скрипт sh, скрипт bash) запуска rclone (подробности).
Способ решения задачи выбран через сравнение содержания каталога, экспортируемого в файл, который будет сравниваться с аналогичным файлом "за вчера". Задача запускается ежедневно по расписанию (пользовательское задание cron).
Было принято решение экспорт содержания каталога производить через вывод дерева каталога в текстовый файл, для чего потребовалось установить в систему соответствующий инструмент, отсутствующий в стандартной поставке используемой мной Linux Mint:
sudo apt install -y tree
Сначала нужно экспортировать в файл текущее содержание каталога, с которым будет сравниваться вывод в файл его последующего содержания.
tree путь_к_каталогу > файл.txt
Сравнение файлов будет производиться через команду cmp, в результате которой сравнение файлов будет произведено побайтово с выводом статуса 0, если файлы идентичны; 1 если различаются (источник цитирования), например:
if cmp -s file1 file2 ; then
echo "Одинаковые"
else
echo "Они такие разные!"
fi
В приводимом ниже примере сценария (скрипт sh, скрипт bash) назначение команд в котором поясняется после символа комментария # :
#!/bin/bash
# экспорт содержания "за вчера" (list old)
listo=/home/minter/Tools/scripts/temp/listo.txt
# экспорт содержания "за сегодня" (list new)
listn=/home/minter/Tools/scripts/temp/listn.txt
# каталог компьютера, подлежащий синхронизации
sm=/home/minter/FBbooks
# ресурс облака, в который производится синхронизация
# пояснения команд см. в описании команд rclone
dm=MEGA-3:fb2
tree $sm > $listn
if cmp -s $listo $listn; then
# каталог не изменялся, синхронизация не нужна
# никаких действий не производится
:
else
# синхронизировать каталог компьютера с облаком по правилу
# "источник - получатель" (источником является компьютер)
rclone sync $sm $dm
# перезаписать файл содержания каталога "за вчера"
# содержанием "за сегодня"
cp $listn $listo
exit
В реальной эксплуатации вместо команды rclone sync $sm $dm мной используется сценарий синхронизации каталога на 2 различных облачных хранилища: Диск Яндекс и MEGA. Выполнение операций протоколируется с указанием времени. Кроме того, в отдельные файлы экспортируются данные о занятом и доступном дисковом пространстве каждого из облачных хранилищ (подробности).
Пример такого сценария:
#!/bin/bash
date=`date '+%d'`
acy=/home/minter/Clouds/rclone/Reports/$date.account-yd-libres.txt
acm=/home/minter/Clouds/rclone/Reports/$date.account-mega-3.txt
log=/home/minter/Clouds/rclone/Reports/$date.rclone-libres.txt
sm=/home/minter/FBbooks
dm1=Libres:FBbooks
dm2=MEGA-3:fb2
if [ -f $log ]; then
:
else
> $log
time=`date '+%H-%M-%S'`
echo "$time -- ebooks log created" >> $log
fi
echo "$time -- start yandex ebooks synchronization" >> $log
rclone sync $sm $dest1
echo "$time -- yandex ebooks synchronized" >> $log
echo " " >> $acy
rclone about Libres: >> $acy
sleep 5
echo "$time -- start mega ebooks synchronization" >> $log
rclone sync $sm $dm2
echo "$time -- mega ebooks synchronized" >> $log
echo " " >> $acm
rclone about MEGA-3: >> $acm
exit
Имеется каталог, содержащий определённое количество файлов, подлежащий резервированию в облако. Данный каталог может быть в течение суток изменён или не изменён. Ставится задача запуска его синхронизации с облаком только в случае его изменения.
Способ решения задачи выбран через сравнение содержания каталога, экспортируемого в файл, который будет сравниваться с аналогичным файлом "за вчера". Задача запускается ежедневно по расписанию (пользовательское задание cron).
Было принято решение экспорт содержания каталога производить через вывод дерева каталога в текстовый файл, для чего потребовалось установить в систему соответствующий инструмент, отсутствующий в стандартной поставке используемой мной Linux Mint:
sudo apt install -y tree
Сначала нужно экспортировать в файл текущее содержание каталога, с которым будет сравниваться вывод в файл его последующего содержания.
tree путь_к_каталогу > файл.txt
Сравнение файлов будет производиться через команду cmp, в результате которой сравнение файлов будет произведено побайтово с выводом статуса 0, если файлы идентичны; 1 если различаются (источник цитирования), например:
if cmp -s file1 file2 ; then
echo "Одинаковые"
else
echo "Они такие разные!"
fi
В приводимом ниже примере сценария (скрипт sh, скрипт bash) назначение команд в котором поясняется после символа комментария # :
#!/bin/bash
# экспорт содержания "за вчера" (list old)
listo=/home/minter/Tools/scripts/temp/listo.txt
# экспорт содержания "за сегодня" (list new)
listn=/home/minter/Tools/scripts/temp/listn.txt
# каталог компьютера, подлежащий синхронизации
sm=/home/minter/FBbooks
# ресурс облака, в который производится синхронизация
# пояснения команд см. в описании команд rclone
dm=MEGA-3:fb2
tree $sm > $listn
if cmp -s $listo $listn; then
# каталог не изменялся, синхронизация не нужна
# никаких действий не производится
:
else
# синхронизировать каталог компьютера с облаком по правилу
# "источник - получатель" (источником является компьютер)
rclone sync $sm $dm
# перезаписать файл содержания каталога "за вчера"
# содержанием "за сегодня"
cp $listn $listo
exit
В реальной эксплуатации вместо команды rclone sync $sm $dm мной используется сценарий синхронизации каталога на 2 различных облачных хранилища: Диск Яндекс и MEGA. Выполнение операций протоколируется с указанием времени. Кроме того, в отдельные файлы экспортируются данные о занятом и доступном дисковом пространстве каждого из облачных хранилищ (подробности).
Пример такого сценария:
#!/bin/bash
date=`date '+%d'`
acy=/home/minter/Clouds/rclone/Reports/$date.account-yd-libres.txt
acm=/home/minter/Clouds/rclone/Reports/$date.account-mega-3.txt
log=/home/minter/Clouds/rclone/Reports/$date.rclone-libres.txt
sm=/home/minter/FBbooks
dm1=Libres:FBbooks
dm2=MEGA-3:fb2
if [ -f $log ]; then
:
else
> $log
time=`date '+%H-%M-%S'`
echo "$time -- ebooks log created" >> $log
fi
echo "$time -- start yandex ebooks synchronization" >> $log
rclone sync $sm $dest1
echo "$time -- yandex ebooks synchronized" >> $log
echo " " >> $acy
rclone about Libres: >> $acy
sleep 5
echo "$time -- start mega ebooks synchronization" >> $log
rclone sync $sm $dm2
echo "$time -- mega ebooks synchronized" >> $log
echo " " >> $acm
rclone about MEGA-3: >> $acm
exit
Комментариев нет:
Отправить комментарий