如何为每2周创建一个cron表达式

如何为每2周创建一个cron表达式,cron,Cron,下面是我尝试的cron表达式0*/14*?它给出了以下计划 开始时间:2017年9月8日星期五凌晨1:25 下一个预定时间:- 1. Friday, September 15, 2017 12:00 AM 2. Friday, September 29, 2017 12:00 AM 3. Sunday, October 1, 2017 12:00 AM 4. Sunday, October 15, 2017 12:00 AM 5. Sunday, October 29, 2017 12

下面是我尝试的
cron
表达式
0*/14*?
它给出了以下计划

开始时间:2017年9月8日星期五凌晨1:25

下一个预定时间:-

1.  Friday, September 15, 2017 12:00 AM
2.  Friday, September 29, 2017 12:00 AM
3.  Sunday, October 1, 2017 12:00 AM
4.  Sunday, October 15, 2017 12:00 AM
5.  Sunday, October 29, 2017 12:00 AM

这个表达式在每个月中每2周运行一次,但我的要求是它必须每2周运行一次,我的意思是在9月29日执行
,nxt计划应该是10月13日,但它是10月1日的计划,每2周没有直接的cron表达式,但我一直遵循cron表达式,这与2周类似,但不完全是2周


cron每2周一次(每月1日和15日凌晨1:30)-30 1,15**
您需要指定开始日期。否则,它将始终在每月的第一天重置。
因此,“0 0 0 23/14 OCT?2017”是从2017年10月23日开始每两周一次,每两周一次

0 0 * * Fri [ $(expr $(date +%W) \% 2) -eq 1 ] && /path/to/command
可在以下网址找到:


“从1日到7日,每月每天7:30,从14日到21日,以及周一。”

我的Ubuntu18上的crontab手册说:

注意:命令的执行日期可以由两个字段指定-月日和周日。如果两个字段都受到限制(即,不*),则当任一字段与当前时间匹配时,将运行该命令。例如 ``30 4 1,15*5''将导致在每月1日和15日上午4:30以及每个星期五运行命令。然而,人们可以达到预期的结果 通过向命令添加测试(请参见下面示例CRON文件中的最后一个示例)

所提到的例子是:

# Run on every second Saturday of the month
0 4 8-14 * *    test $(date +\%u) -eq 6 && echo "2nd Saturday"

我认为您应该保存上次运行脚本的日期,如果当前时间大于或等于14天,则应运行,否则应
终止
退出
。如何执行这些操作,您可以提供一些技术信息吗?您需要创建一个文件或将日期存储在数据库中,然后读取该日期,并使用以下函数将其与当前日期进行比较:`
public function date_difference($d1,$d2){$date1=new DateTime($d1);$date2=new DateTime($d2);return$date2->diff($date1)->format(“%r%a”);}
我们不能每两周定义/创建一个直接的Cron表达式吗必须有一些复杂的条件方式,但不可能像您这样做。我在这方面不是很好,所以我建议我应该做什么。这实际上是“从2017年10月23日开始每14天”。因此,唯一的执行时间是2017-09-23。
00 0*/14*Fri
是否也适用?可以使用
0 0 0*/14*?
但不能与特定的日期名称结合使用,因为没有实现对指定周中某一天和月中某一天参数的支持。
# Run on every second Saturday of the month
0 4 8-14 * *    test $(date +\%u) -eq 6 && echo "2nd Saturday"