如何在crontab中匹配正则表达式

时间:2020-03-12 10:00:13

标签: bash cron

我的crontab有问题。我需要检查执行脚本的日期。

我想运行命令[[ $(date '+%a') =~ Thu|jeu ]] && echo 'aaaaaaa'。这在终端上完美工作。但是,如果我将其放在crontab中:[[ $(date '+\%a') =~ Thu|jeu ]] && echo 'aaaaaaa'无效。

/var/log/syslog中,我得到了:CRON[5461]: (root) CMD ([[ $(date '+%a') =~ Thu|jeu ]] && echo 'aaaaaaa' > /tmp/z.txt 2>&1)

有人知道为什么该命令在终端上起作用但在cron上不起作用吗?

1 个答案:

答案 0 :(得分:1)

Crontab默认为POSIX sh,并且您使用的是bash特定的语法。

显而易见的解决方案是在crontab条目本身中设置您的shell。 而且cron的PATH设置也很有限。

SHELL=/bin/bash

[[ $(/bin/date '+\%a') =~ Thu|jeu ]] && echo 'aaaaaaa'

或者仅使用POSIX sh语法

case "$(/bin/date '+\%a')" in Thu|jeu) echo 'aaaaaaa';; esac
  • 假设date确实位于/bin/date中,否则您还需要在PATH条目中设置crontab,以便您可以执行{{1 }}。

  • 请参见date