评估 cron 中的数学表达式

评估 cron 中的数学表达式

我想根据一周中某一天的奇偶校验来命名文件。在终端中,以下工作:$(($(date +\%u)%2))

但这在 cron 中不起作用(我怀疑数学表达式的评估不起作用)。

我怎样才能让它在 cron 中工作?

答案1

你转义了一个百分号,而不是另一个:

$(($(date +\%u)%2))
               ^
              HERE

全部crontab 条目中的百分号需要转义,因为 % 在那里有特殊含义。引用 crontab(5) 联机帮助页:

该行的整个命令部分(直到换行符或 % 字符)将由 /bin/sh 或 crontab 文件的 SHELL 变量中指定的 shell 执行。命令中的百分号(%),除非用反斜杠()转义,否则将被更改为换行符,并且第一个%之后的所有数据将作为标准输入发送到命令。

诚然,该段落的措辞可以更好。

所以这需要是:

$(($(date +\%u)\%2))

答案2

crontab(5)

几个环境变量由 cron(8) 守护进程自动设置。 SHELL设置为/bin/sh,

而且sh对那些花哨的数学一无所知。这提出了两种可能的解决方案;首先,设置SHELL为其他 shell,例如SHELL=/bin/bash或 来保持 cron 文件简单,然后调用一个脚本,该脚本包含所需的任何日期数学业务逻辑。 (顺便%说一句,也很特别)crontab(5)

答案3

创建两个 cron 条目。

一个在奇偶校验为零的日子运行(使用 crontab 中的“星期几”字段),写入以零命名的文件。另一个在具有一个奇偶校验的日子里运行,写入以一个奇偶校验命名的文件。

相关内容