我创建了一个简单的备份脚本,该脚本创建所有重要文件夹的 .tar.gz 并将其上传到 Google Drive 使用克隆。
当我手动运行脚本时,一切都工作得很好。但当 anacron 运行它时,它似乎失败了。
我anacron -fnd
经常立即运行 anacron 来测试一切是否运行正常。
以下是我在日志文件中收到的错误
2022/11/28 23:58:03 注意:未找到配置文件“/root/.config/rclone/rclone.conf” - 使用默认值
2022/11/28 23:58:03 无法为“linuxbackuprclone:Linux-Backup”创建文件系统:在配置文件中未找到部分
linuxbackuprclone 是我在 rclone 中远程的名称。
Linux-Backup 是 Google Drive 中文件夹的名称。
这是我的备份脚本,它的名字是备份, 位于/home/paramv/Bash 脚本,并命名为备份
#!/bin/bash
set -e
backupDirPath="/home/paramv/Linux-Backup"
if [ ! -d $backupDirPath ]; then
mkdir $backupDirPath
fi
if [ ! -d "/home/paramv/Bash-Script/Backup-Log" ]; then
mkdir Backup-Log
fi
# Create a log file named after the date the backup was created
logFile="/home/paramv/Bash-Script/Backup-Log/$(date).log"
logFile=${logFile// /_}
touch $logFile
# Create tar of dirs to backup
echo "Creating backup.tar.gz" >> $logFile
# sudo tar -zcf /home/paramv/Linux-Backup/backup.tar.gz -P /home/paramv/Documents/ &>> $logFile
if [ $? != 0 ]; then
echo "Failed to create backup.tar.gz. Error code = $?" &>> $logFile
exit 1
else
echo "Completed creating backup.tar.gz" >> $logFile
fi
# Upload local backup file to the cloud
echo "Uploading backup.tar.gz to Google Drive" >> $logFile
/usr/bin/rclone copy --update --transfers 30 --checkers 8 --contimeout 60s --timeout 300s --retries 3 --low-level-retries 10 "/home/paramv/Linux-Backup/backup.tar.gz" "linuxbackuprclone:Linux-Backup" &>> $logFile
if [ $? != 0 ]; then
echo "Failed to upload backup.tar.gz to Google Drive. Error code = $?" &>> $logFile
exit 1
else
echo "Uploaded backup.tar.gz to Google Drive" >> $logFile
fi
exit
以下是我的 anacron 脚本,位于/etc/cron.weekly,并命名为 prsnlbackup
#!/bin/sh
set -e
exec /home/paramv/Bash-Script/backup
exit
以下是运行的输出rclone config
。
Current remotes:
Name Type
==== ====
linuxbackuprclone drive
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q>
这就是我的rclone.conf好像。它位于/home/paramv/.config/rclone
[linuxbackuprclone]
type = drive
scope = drive
token = {"omitted to make it readable"}
team_drive =
我正在运行 Ubuntu 22.04.1 LTS。
任何帮助将不胜感激。
答案1
我怀疑您正在像自己一样手动运行脚本,但是当您将脚本放入 /etc/cron.weekly/ 时,您将其设置为以 root 身份运行。
如果您想自己运行脚本,只需将其添加到您自己的 crontab 中即可。不要使用su
或sudo
。
crontab -e # Edit my own crontab
...
它是标准的六个字段,分别为分钟(0-59)、小时(0-23)、日(1-31)、月(1-12)、指数(0-6,0=Sun)。选择“星期几”值之一以确保它仅每周运行。例如,它将在每周日凌晨 2 点运行,将其输出写入backup.log
主目录中的日志文件:
0 2 * * 0 Bash-Script/backup > backup.log 2>&1
答案2
解决方案是运行然后sudo -i
复制rclone.conf
到/home/paramv/.config/rclone
/root/.config/rclone