背景

背景

背景

我想使用 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.shbash -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 安装

答案3

borgmatic就是为此目的而创建的,它是 brog 的包装器。创建一个.yaml配置文件,然后运行borgmatic。按照此cron 指南一切就绪。

相关内容