我有一个 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.sh
。sh
如果没有 shebang总体情况复杂,但sh
应该在 中运行sh
,无论谁提供sh
(有不同的实现,比较这)。
当您从 Bash 运行脚本时,它会在 Bash 中运行。
&>>
您使用的是一种 bashism。在 Bash 中&>> file
相当于,>> file 2>&1
而这正是您想要的。在sh
它相当于,& >> file
而这并不是您想要的。
解决方案:使用 shebang。
无法访问/home/myusername
?
/home/myusername
可能不可用,因为:
/home/myusername
myusername
退出时自动卸载(尤其在加密的情况下);或者
/home/myusername
安装为保险丝没有allow_other
,因此以 root 身份运行的 cron 无法访问它;或由 cron 运行
systemd
并且服务(cron.service
)使用ProtectHome=
或InaccessiblePaths=
限制访问/home/myusername
(但不太可能)。
解决方案:不要/home/myusername
与由 root 运行的 cron 作业一起使用。