我的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上不起作用吗?
答案 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