我有一个小检查今天是否是该月的第一个星期一,如下所示:
['$(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'