1

Фон

Я хотел бы использовать Borg Backup в качестве решения для резервного копирования моего сервера Ubuntu. Они предлагают очень удобный сценарий sh, который, по их словам, можно просто запустить как работу cron, но он не работает для меня.

проблема

Как автоматизировать резервное копирование Borg? Если лучший способ использовать cron, то что не так с моей имплементацией?

Данные

Корень Crontab:

# 5 2 * * * sh /home/***/Scripts/borgBackup_run.sh >/dev/null      # Back up the root partition daily (2:05a)
* * * * * sh /home/***/Scripts/borgBackup_run.sh >/dev/null      # Test the script

borgBackup_run.sh:

Изменено с оригинала, чтобы быть очень голым:

#!/bin/sh

echo 'Starting backup now...' >> 
/home/***/Logs/borgBackup_create.log

#/usr/bin/borg create --verbose --filter AME --list --stats --show-rc --compression lz4 --exclude-caches --one-file-system --exclude-from ~/Scripts/borgBackup_exclude.txt /mnt/RootBackup/borg::'{hostname}-{now:%Y-%m-%d}' /
/usr/bin/borg create /mnt/RootBackup/borg::cronTest /home/***/Logs/ # Backup a small folder as a test

echo 'Done.' >> /home/***/Logs/borgBackup_create.log

"ls -l ~/Scripts/borgBackup_run.sh"

-rwxr-xr-x 1 root root 455 Sep 27 12:34 Scripts/borgBackup_run.sh

Заметки:

Когда borgBackup_run.sh запускается из командной строки, например: sudo Scripts/borgBackup_run.sh , скрипт отлично работает, создавая новый архив в /mnt/RootBackup/borg .

Кроме того, через каждую минуту (когда запускается cronjob) в файле .log по адресу /home/***/Logs/borgBackup_create.log показываются « Starting backup now... и « Done. , указывая, что скрипт прошел весь путь, но по какой-то причине borg не работал.

Я попытался удалить sh из файла crontab, используя вместо этого bash , и изменив interobang на #!/bin/bash вместо #!/bin/sh . Я также попытался обернуть строку /user/bin/borg create ... в borgBackup_run.sh в bash -c "..." .

Любая помощь будет принята с благодарностью!

2 ответа2

1

Я только что закончил создание аналогичного скрипта cron. Включена синхронизация файлов резервных копий borg с облачной платформой хранения BackBlaze (похожа на amazon s3, но дешевле). Надеемся, что это будет полезно для кого-то еще, кто ищет автоматизацию Borg с недорогой удаленной резервной копией!

#!/bin/sh

echo "Starting backup for `date`\n"

# setup script variables
export BORG_PASSPHRASE="secret-passphrase-here!"
export BORG_REPO="/path/to/repo"
export BACKUP_TARGETS="/path1/to/backup /path2/to/backup"
export BACKUP_NAME="backup-and-remote-folder-name"

# create borg backup archive
cmd="borg create ::`date +%Y%m%d`-$BACKUP_NAME $BACKUP_TARGETS --stats"
$cmd

# prune old archives to keep disk space in check
borg prune -v --list --keep-daily=3 --keep-weekly=2

# sync backups to offsite storage
b2 authorize-account accountID applictionKey
b2 sync --delete --replaceNewer $BORG_REPO b2://bucket-name/$BACKUP_NAME

# all done!
echo "Backup complete at `date`\n";

В настоящее время работает один раз в день со следующим crontab

0 11 * * * /path/to/script/backup.sh >> /path/to/logfile/backup.log 2>&1

Требуется учетная запись BackBlaze и их CLI-инструмент для установки CLI

1

Я выяснил проблему и выкладываю решение на случай, если у кого-нибудь в будущем появится подобная проблема.

Я настроил свой репозиторий как незашифрованный, что заставило borg попытаться работать в интерактивном режиме (запросить стандартный вывод, если резервное копирование в незашифрованный репозиторий в порядке). Чтобы заставить borg работать не в интерактивном режиме, мне пришлось экспортировать "автоматический ответчик" в borgBackup_run.sh перед вызовом borg create ... Новая строка в скрипте выглядит так:

export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes

Имя этого переменный было найдено в справочной странице для man Ряд других "автоматической отвечающие" также можно найти на странице руководства , чтобы гарантировать , что Борг работает в интерактивном режиме, не в скрипте.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .