命令在 crontab 中不起作用

命令在 crontab 中不起作用

我有一个小检查今天是否是该月的第一个星期一,如下所示:

['$(date "+%u")' = "1"] && echo 'trąba'

但是当 crontab 向我发送一封电子邮件表示出现问题时,我收到错误

/bin/sh: -c: line 0: unexpected EOF while looking for matching `''
/bin/sh: -c: line 1: syntax error: unexpected end of file

我尝试改变'$(日期“+%u”)'到“$(date '+%u')”但没有帮助。电子邮件的标题是 ["$(date '+ 所以我认为它有第一个引号的问题,但这段代码在终端内执行时工作得很好。也许有人有更好的“检查”来检查第一个星期一月

操作系统:CeontOS 7

控制-l

* * * * * [ "$(date +%u)" -eq 1 ] && echo trąba

答案1

固定的 POSIX 代码如下:

[ "$(date +%u)" -eq 1 ] && echo trąba

错误/警告/信息是:

  • [..]块中缺少空格

  • 撇号代替双引号

  • -eq在测试中用等号代替 POSIX [..]

  • 之后你不必引用任何内容echo

  • 你不必引用数字

  • 你不必引用该date代码


克朗

*/1 * * * * [ "$(/usr/bin/date +\%u)" -eq 1 ] && /usr/bin/echo trąba >> ~/cron-test
  • 为了测试这一点,您可以尝试上面的代码

  • 您的系统上的其他地方可能有您的二进制date文件echo,以确定它们的位置、用途which date等。

  • 修改你的 Cron 后,你可以简单地使用它并坐稳

    tail -f ~/cron-test
    

答案2

在 crontab 条目的命令部分中,%在执行命令之前被转换为换行符,除非它被转义。所以你需要转义日期格式字符串中的那个。

其他问题:您需要在 the[ ]和其中的内容之间留有空格,并且$( )不会在单引号内扩展。这是固定版本:

[ "$(date "+\%u")" = "1" ] && echo 'trąba'

相关内容