克朗每三天工作一次
是否有可能每三天运行一次cronjob ? 或者可能是10次/月。
每三天运行一次…
0 0 */3 * *
那个怎么样?
如果你想让它在一个月的特定日子里运行,比如第1,4,7等等,那么你可以在你的脚本中添加一个条件来检查当月的当天。
if (((date('j') - 1) % 3)) exit();
或者像@mario指出的那样,可以使用date('k')来获取一年中的某一天,而不是根据每月中的某一天进行。
* * */3 * * that says, every minute of every hour on every three days. 0 0 */3 * * says at 00:00 (midnight) every three days.
因为cron是“无状态的”,所以它不能准确地expression“频率”,只能“performance”与当前时间持续匹配的“模式”。
改写你的问题使得这个问题变得更加明显:“每天晚上00:01可以运行一个cronjob,除了在两个晚上运行的时候跳过晚上吗? 当cron将当前时间与作业请求时间模式进行比较时,cron无法知道过去是否能够执行您的工作。
(当然可以编写一个有状态的cron来logging过去的工作,因此包含了匹配这个状态的模式,但是这不是大多数操作系统中包含的标准cron,这样的系统会变得很复杂,因为需要引入当这样的模式“重置”,例如,当时间更改(即crontab条目被修改)时重置模式?看看你最喜欢的日历应用程序,看看它可以expression的复杂模式的重复安排的事件,请注意,他们没有重置问题,因为起始日历事件具有自然的“开始”a / k / a“重置”date。尝试重新计划每隔一周的周期性日历事件以在圣诞节推迟一周通常你必须终止这个循环事件并重新启动一个全新的事件;这说明了即使复杂的日历应用程序代表重复模式的有限的expression能力,当然,日历有很多 状态 – 每个单独的事件可以在大多数日历应用程序中被独立删除或重新安排。
此外, 如果成功 ,您可能希望每隔三晚做一次工作,但如果最后一次失败,可以立即再次尝试,也许第二天晚上(不要再等3天),或者更早一些,比如一小时后(但是不要再试早上抵达)。 显然,cron不可能知道你的工作是否成功,而且模式也不能expression一个更频繁的“重试”时间表。
无论如何 – 你可以做你想要的东西。 写一个脚本,告诉cron晚上00:01运行它。 这个脚本可以检查logging“最后一次运行”的事件的时间戳,如果它是> 3天前**,执行作业并重置“最后一次运行”时间戳。
(*时间戳指标是一个持久的状态,你可以操纵和检查,但哪个cron不能)
**如果你使用人类可读的时钟时间,一定要小心时间 – 一年两次,有些日子有23或25个小时,02:00-02:59一天发生两次,所有。 使用UTC来避免这一点。
0 0 1-30/3 * *
这将从第一天开始每三天运行一次。 这里是20个预定的跑步 –
- 2015-06-01 00:00:00
- 2015-06-04 00:00:00
- 2015-06-07 00:00:00
- 2015-06-10 00:00:00
- 2015-06-13 00:00:00
- 2015-06-16 00:00:00
- 2015-06-19 00:00:00
- 2015-06-22 00:00:00
- 2015-06-25 00:00:00
- 2015-06-28 00:00:00
- 2015-07-01 00:00:00
- 2015-07-04 00:00:00
- 2015-07-07 00:00:00
- 2015-07-10 00:00:00
- 2015-07-13 00:00:00
- 2015-07-16 00:00:00
- 2015-07-19 00:00:00
- 2015-07-22 00:00:00
- 2015-07-25 00:00:00
- 2015-07-28 00:00:00
怎么样:
00 00 * * * every 3 days && echo test
凡是脚本的地方:
#!/bin/sh case $2 in days) expr `date +%j` % $1 = 0 > /dev/null ;; weeks) expr `date +%V` % $1 = 0 > /dev/null ;; months) expr `date +%m` % $1 = 0 > /dev/null ;; esac
所以它每天都在运行。
使用*/3
在本月的第3日,第6日,…第27日,第30日运行,但是一个月后第31日会出现错误。 every
剧本在年底之后都是错误的。
如果你把它configuration成运行,例如星期一和星期四,这将会让它有3天和4天的rest时间。
否则将其configuration为每天运行,但使您的PHP cron脚本尽早退出:
if (! (date("z") % 3)) { exit; }
如果你想让它在一个月的特定日子里运行,比如第1,4,7等等,那么你可以在你的脚本中添加一个条件来检查当月的当天。
我以为你所需要的只是每三天的三分之一,而三分之一就是三分之一。 所以7/3就意味着每个月的七号开始每隔三天
你应该学习crontab
的基础知识。
编辑cron命令crontab -e
,然后按^(CTRL) + X然后Y ,最后在mac上按ENTER(返回)来保存文件。 你可以通过crontab -l
来检查已经安装的新的crontab -l
一个crontab文件有五个字段用于指定分钟,小时,月份,月份和一周中的某一天,然后是在该时间间隔运行的命令。
* * * * * command to be executed - - - - - | | | | | | | | | +----- day of week (0 - 6) (Sunday=0) | | | +------- month (1 - 12) | | +--------- day of month (1 - 31) | +----------- hour (0 - 23) +------------- min (0 - 59)
*
在上面的值字段意味着所有的合法值,如在该列的大括号。
在这里,我写了一个关于它的详细的post: 在Unix中设置Cron
0 0 * * * [ $(($((
date +% – j - 1)) % 3)) == 0 ] && script
从date
获得一年的日子,从1开始偏移,从0开始,检查是否是模3。