Cronexpression符号

我想写一个crontab条目,每个月的最后一周每30分钟运行一次。 我知道做最后的星期天例如cron是:

0 0/30 * ? * 0L 

当我尝试逗号分隔周日场如下所示:

 0 0/30 * ? * 0L,1L,2L,3L,4L,5L,6L 

我收到一个错误:

 Support for specifying 'L' with other days of the week is not implemented 

有没有办法简化这个crontabexpression式,还是我需要制作7个不同的crontab项每个不同的一天?

由于错误消息说你不能这样做。 如果今天是在本月的最后一周内,则必须检查脚本,并根据需要退出/继续。

 #!/bin/bash MonthDays=$(echo $(cal) | awk '{print $NF}') Today=$(date '+%d') let DaysLeft=MonthDays-Today if [ $DaysLeft -gt 6 ] then exit 1 fi echo "Run the rest of the script" 

或者,您可以在crontab中使用以下脚本 – 将其保存为last-week

 #!/bin/bash MonthDays=$(echo $(cal) | awk '{print $NF}') Today=$(date '+%d') let DaysLeft=MonthDays-Today if [ $DaysLeft -gt 6 ] then exit 1 fi 

像这样使用它

 0,30 * * * * last-week && your-script 

其中说如果last-week脚本以0状态退出,则运行your-script

如果你想要真正的“最后一周”(从本月的最后一个星期天到最后一个星期),请对@ Iain的脚本进行一些更改:

 #!/bin/bash Today=$(date +%d) LastSun=$(ncal | awk 'NR==2 { print $NF }') if [ $Today -ge $LastSun ] then exit 1 fi 

以相同的方式使用它。