Cron 计划备份脚本不工作或不写入日志文件

Cron 计划备份脚本不工作或不写入日志文件

我有一个 duplicity 备份脚本,设置为通过 root cron tab 每天运行一次。

我是这样设置的:

sudo crontab -e -u root

并添加了以下行:

00 03   *   *   *  root   /home/[myusername]/Scripts/Backups/DuplicityBackup.sh

该脚本具有写入文本文件的命令,如下所示:

echo "Creating backup of data directory"
PASSPHRASE='[mypassword]' duplicity /usr/share/nginx/data file:///dysonbackup/datadir &>> /home/[myusername]/Scripts/Backups/backup_logs/data_backup_log.txt

echo "Done"

以 root 身份运行脚本本身将启动备份并写入文本文件。

跑步

sudo crontab -l

显示其列出

跑步

grep DuplicityBackup.sh /var/log/syslog

节目

May 28 03:00:01 [myservername] CRON[89749]: (root) CMD (root   /home/[myusername]/Scripts/Backups/DuplicityBackup.sh)

所以我假设它至少触发了运行,但是文本文件上没有新的信息。

并且由于备份目录中没有新文件,因此 duplicity 备份似乎没有正在运行。

Ubuntu 20.04

duplicity 0.8.12

答案1

过度领域

sudo crontab -e -u root为 root 用户编辑 crontab。这与系统范围的 crontab ( /etc/crontab) 不同。前者使用以下形式的条目:

m h  dom mon dow  command

后者使用

m h  dom mon dow  user  command

您使用了后一种语法,而您本应使用前一种语法。该工具尝试运行

root   /home/myusername/Scripts/Backups/DuplicityBackup.sh

解决方案:要么将您的工作移至/etc/crontab原样;要么通过删除来修复语法root

如果还不够,请继续阅读。


没有事吗?

包含DuplicityBackup.sh舍邦指定 Bash 作为解释器?

cron 将运行/home/myusername/Scripts/Backups/DuplicityBackup.shsh如果没有 shebang总体情况复杂,但sh应该在 中运行sh,无论谁提供sh(有不同的实现,比较)。

当您从 Bash 运行脚本时,它会在 Bash 中运行。

&>>您使用的是一种 bashism。在 Bash 中&>> file相当于,>> file 2>&1而这正是您想要的。在sh它相当于,& >> file而这并不是您想要的。

解决方案:使用 shebang。


无法访问/home/myusername

/home/myusername可能不可用,因为:

  • /home/myusernamemyusername退出时自动卸载(尤其在加密的情况下);

  • 或者/home/myusername安装为保险丝没有allow_other,因此以 root 身份运行的 cron 无法访问它;

  • 或由 cron 运行systemd并且服务(cron.service)使用ProtectHome=InaccessiblePaths=限制访问/home/myusername(但不太可能)。

解决方案:不要/home/myusername与由 root 运行的 cron 作业一起使用。

相关内容