脚本手动工作但不在 cron 中 - 不计算 var?

脚本手动工作但不在 cron 中 - 不计算 var?

我正在为学校作业制作 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 中运行,但它似乎无法解析计算;你可能需要使用公元前

相关内容