在UNIX / Linux的cronexpression式允许指定确切的开始和结束date

我想能够configuration这样的东西。

  1. 我想从2009年6月29日至2009年12月30日每天上午7点运行“X”工作。 考虑当前date为4/4/2009。

可以用棘手的方式来完成。

你需要三个独立的cron作业,所有的作业都运行相同的代码(在这个例子中是X ):

  • 一个在六月二十九号和三十号( "0 7 29,30 6 * X" )。
  • 七月至十一月的每一天( "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 

那么,如果你忘记关闭这个工作,那也无关紧要。

是的,主要是。 一些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 

我通常是保持程序运行逻辑的粉丝。 您可能会考虑设置一个每天运行脚本的cron作业,然后让脚本自行决定是否应该执行任何有用的操作。 当最后一个有用的日子(十二月三十日)已经过去了,你的脚本可以从crontab中删除它自己。 在脚本中,您可以使用所有必要的注释来设置逻辑,以描述您正在做什么以及为什么。

如果你的工作是一个二进制程序,你可能会在调用程序之前设置一个run_script来完成这个调度过滤工作。

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

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

或这个

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

一个解决方案是设置6个crons,每个月1个,每个月都会在每天的上午7点运行。

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

不,阿法克,你不能这样做。

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命令中编写脚本。