背景
我想使用 Borg Backup 作为我的 Ubuntu 服务器的备份解决方案。它们提供了非常方便的sh 脚本他们说你可以将其作为 cron 作业来运行,但这对我来说不起作用。
问题
如何自动化 Borg 备份?如果最好的方法是使用 cron,那么我的实现有什么问题?
数据
Root 的 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
我还尝试将 line 换行/user/bin/borg create ...
到borgBackup_run.sh
中bash -c "..."
。
任何帮助将不胜感激!
答案1
我找到了这个问题,并发布了解决方案,以防将来有人遇到类似的问题。
我将存储库设置为未加密,这导致borg
尝试以交互方式运行(询问 stdout 是否可以备份到未加密的存储库)。为了使 borg 以非交互方式运行,我必须borgBackup_run.sh
在调用 之前在 中导出一个“自动应答器” borg create ...
。脚本中的新行如下所示:
export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes
此变量的名称是在man
的页面中找到的borg
。在该页面中还可以找到许多其他“自动应答器” man
,以确保 borg 在脚本中以非交互方式运行。
答案2
我刚刚创建了一个类似的 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 安装