我正在为学校作业制作 GFFS 备份脚本,但遇到了一些问题。它的工作原理如下:
/etc/backup/backup.sh PERIOD NUMBER
我在 cron 中添加了以下几行:
# m h dom mon dow command
# Backup for fileserver:
#daily: 5 times/week
0 23 * * 1-5 /etc/backup/backup.sh daily $(date -d "-1 day" +%w)
#weekly: 5 times/month
10 23 * * 7 /etc/backup/backup.sh weekly $((($(date +%-d)-1)/7+1))
#monthly: 12 times/year
20 23 1 * * /etc/backup/backup.sh monthly $(date -d "-1 day" +%m)
#yearly: each year
0 3 1 1 * /etc/backup/backup.sh yearly $(date -d "-1 day" +%Y)
最后的计算是为了知道要覆盖之前的备份。当手动触发时,这很完美,但当由 cron 触发时,它会做一些奇怪的事情。我说的是每周备份条目。计算应该给出当月的周数。我做了“grep CRON /var/log/syslog”并找到了这一行:
Dec 19 14:33:01 BE-SV-04 CRON[5445]: (root) CMD (/etc/backup/backup.sh weekly $((($(date +)
看起来好像 cron 没有正确执行计算。有什么帮助吗?
答案1
我认为你必须转义“%”符号
所以这:
0 23 * * 1-5 /etc/backup/backup.sh daily $(date -d "-1 day" +\%w)
... 应该管用。我不知道哪个必须转义,它认为+和%,请尝试一下。 *当我在 cron 中执行此操作时,我使用了更丑陋的反引号语法来执行命令,并且也必须转义它们,例如:*
0 1 * * * something >> bla\`date \+\%Y_\%m_\%d\`.log
答案2
我不确定 cronjob 在哪个 shell 中运行,但它似乎无法解析计算;你可能需要使用公元前。