Cron Expression忽略了今年的第一个星期六&在一年中的所有星期六举行

时间:2014-04-12 12:42:40

标签: cron cron-task cronexpression

有人可以帮助我构建 cron 表达式。我需要在一年中的所有星期六上午9:00运行我的工作,不包括一年中的第一个星期六。

我曾尝试使用以下表达式,但它不起作用..

0 0 9 ? 1 7#2,7#3,7#4 *, 0 0 9 ?  2-12 SAT *
  • 0 0 9 ? 1 7#2,7#3,7#4 * - 这意味着在1月份的第二,第三,第四周六上午9点开始工作。但这里的问题是它只在最后一个星期六(即7#4)。在一些教程中,我读到逗号意味着它考虑了所有的值,但令我惊讶的是它只考虑了最后一个值)

  • 0 0 9 ? 2-12 SAT * - 这意味着从2月到12月我需要在上午9点开始工作。

我需要以这样的方式组合这两个表达式,它应该满足我的要求。

提前致谢

1 个答案:

答案 0 :(得分:0)

您需要在程序中进行比较,而不是在cronjob中。例如,在Unix shell脚本中:

#!/usr/bin/env bash

date=$(date +%a)  
month=$(date +%m)
day=$($date +%e)  

if [ "$date" = "Sat" -a "$month" = "Jan" -a "$day" -lt 8 ];then
  echo "Doesn't run this script at 1st Saturday of the year."
  exit
fi

# put rest script

将cronjob设置为仅在星期六上午9点运行

0 9 * * 6 YOUR_PROGRAM

说明:

  %a   locale's abbreviated weekday name (e.g., Sun)
  %b   locale's abbreviated month name (e.g., Jan)
  %e   day of month, space padded; same as %_d