17

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

  1. 我想从 2009 年 6 月 29 日到 2009 年 12 月 30 日每天早上 7 点运行工作“X”。将当前日期视为 2009 年 4 月 4 日。
4

5 回答 5

19

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

对于该范围,您需要三个单独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作业,以通过电子邮件向您发送需要禁用它的电子邮件。

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

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

然后,如果您忘记禁用作业也没关系。

于 2009-04-01T11:09:18.290 回答
6

是的,主要是。有些 cron 实现支持多年,有些不支持,所以我们假设你的不支持。另外,我假设该作业仅由 cron 守护程序运行,因此我们可以使用执行位来确定 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
于 2009-04-02T22:53:12.857 回答
2

我通常喜欢将逻辑与正在运行的程序保持一致。您可能会考虑设置一个每天运行脚本的 cron 作业,然后让脚本自行决定它是否应该做任何有用的事情。当最后一个有用的日子(12 月 30 日)过去后,您的脚本可以将自己从 crontab 中删除。在脚本中,您可以使用所有必要的注释来设置逻辑,以描述您在做什么以及为什么。

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

于 2009-04-21T03:16:47.630 回答
-1

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

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

或这个

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

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

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

于 2009-04-01T10:32:49.750 回答
-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 命令中编写脚本。

于 2009-04-01T10:37:16.010 回答