我希望能够配置这样的东西。
- 我想从 2009 年 6 月 29 日到 2009 年 12 月 30 日每天早上 7 点运行工作“X”。将当前日期视为 2009 年 4 月 4 日。
它可以以一种棘手的方式完成。
对于该范围,您需要三个单独cron
的作业,它们都运行相同的代码(X
在本例中):
"0 7 29,30 6 * X"
)。"0 7 * 7-11 * X"
)。"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
然后,如果您忘记禁用作业也没关系。
是的,主要是。有些 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 作业,然后让脚本自行决定它是否应该做任何有用的事情。当最后一个有用的日子(12 月 30 日)过去后,您的脚本可以将自己从 crontab 中删除。在脚本中,您可以使用所有必要的注释来设置逻辑,以描述您在做什么以及为什么。
如果你的工作是一个二进制程序,你可以设置一个 run_script 在调用程序之前执行这个调度过滤工作。
您可以使用它来生成以特定时间间隔运行的 crontab:
http://www.robertplank.com/cron/
或这个
http://www.webmaster-toolkit.com/cron-generator.shtml
一种解决方案是设置 6 个 crons,每个月 1 个,每个将在该月每天早上 7 点运行。
这可能是最简单的方法,下一个是编写脚本。
不,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 命令中编写脚本。