我想写一个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
以相同的方式使用它。