unix / linux中的cron表达式是否允许指定确切的开始和结束日期

时间:2009-04-01 10:25:37

标签: linux unix cron crontab

我希望能够配置这样的东西。

  1. 我希望从2009年6月29日至2009年12月30日每天早上7点开始工作'X'。请将当前日期视为4/4/2009。

5 个答案:

答案 0 :(得分:15)

可以以一种棘手的方式完成。

您需要为该范围创建三个单独的cron个作业,所有作业都运行相同的代码(在这种情况下为X):

  • 6月29日和30日("0 7 29,30 6 * X")。
  • 7月到11月的每一天("0 7 * 7-11 * X")。
  • 除了12月的最后一天("0 7 1-30 12 * X")之外的所有人。

这会给你:

# Min   Hr   DayOfMonth   Month   DayOfWeek   Command
# ---   --   ----------   -----   ---------   -------
   0     7      29,30        6        *          X
   0     7          *     7-11        *          X
   0     7       1-30       12        *          X

然后确保在2010年6月29日之前发表评论。您可以在12月31日添加最终cron个工作,通过电子邮件向您发送需要禁用的工作。

如果年份不是2009年,您可以修改X立即退出。

if [[ "$(date +%Y)" != "2009" ]] ; then
    exit
fi

如果忘记禁用这些作业,那就无所谓了。

答案 1 :(得分:4)

是的,主要是。有些cron实现支持多年,有些则不支持,所以我们假设你的实现没有。另外,我假设这个作业只是由cron守护进程运行,所以我们可以使用execute位来确定cron是否应该运行这个作业。

请注意,您需要将脚本保留为不可执行文件,直到您希望它运行为止。

以下cron表达式将执行您想要的操作(每天,包括周末)。根据需要调整:

# Make the job executable on 29 June.
0 6 29 6 * chmod +x /path/to/my/job/script

# Run the job between June and December, only if it's executable.
0 7 * 6-12 * test -x /path/to/my/job/script && /path/to/my/job/script

# Disable execution after 30 December.
0 8 30 12 * chmod -x /path/to/my/job/script

答案 2 :(得分:2)

我通常喜欢在程序运行时保持逻辑。您可能会考虑设置一个每天运行脚本的cron作业,然后让脚本自行决定是否应该执行任何有用的操作。当最后一个有用的日期(12月30日)过去后,您的脚本可以从crontab中删除自己。在脚本中,您可以使用描述所做操作和原因所需的所有注释来设置逻辑。

如果你的工作是二进制程序,你可以设置一个run_script,在调用程序之前执行此计划过滤工作。

答案 3 :(得分:-1)

您可以使用它来生成以特定间隔运行的crontab:

http://www.robertplank.com/cron/

或者这个

http://www.webmaster-toolkit.com/cron-generator.shtml

一个解决方案是设置6个crons,每个月1个,每个月每天早上7点运行。

这可能是最简单的方法,下一个就是编写脚本。

答案 4 :(得分:-1)

不,afaik,你做不到。

cron字段分别包含分钟,小时,月,日和星期的值。

10 5 10 * * means run at 5:10 on every 10th of every month.

10 5 * 12 * means run at 5:10 on every day in december

10 5 * * 1  means run at 5:10 every Monday

您可以在一系列特定月份运行它,因为crontab格式确实接受范围。对于月份字段,4月到12月将是4-12。但这并没有考虑到你希望将此限制在2009年。

没有机制来设置cronjob的开始和停止日期。当然,你总是可以编写脚本。每天运行一个cronjob并检查当前日期是否在30/12之前。如果它是31/12使其自行删除。或者更深思熟虑的东西。

的crontab
0 7 * * 6-12 command_X

会做你想要的部分,但它会从6月1日开始,一直持续到12月31日。跳过6月和12月31日的第一部分必须在X命令中编写脚本。