如何创建每两周一次的 cron 表达式

问题描述 投票:0回答:9

这是我尝试过的

cron
表达式:
0 0 0 */14 * ?
。它创建以下时间表:

开始时间:

2017 年 9 月 8 日星期五凌晨 1:25

下次:

  1. 2017 年 9 月 15 日星期五中午 12:00
  2. 2017 年 9 月 29 日星期五中午 12:00
  3. 2017 年 10 月 1 日,星期日,中午 12:00
  4. 2017 年 10 月 15 日,星期日,中午 12:00
  5. 2017 年 10 月 29 日,星期日,中午 12:00

这个表达式每个月每两周运行一次,但我的要求是它必须每两周运行一次。我的意思是在9月29日执行之后,下一个日期应该是10月13日,但它安排在10月1日。

cron
9个回答
67
投票

每两周没有直接

cron
表达。我使用以下
cron
表达方式,类似于 2 周,但不完全是 2 周。

cron
每两周一次,每月 1 日和 15 日凌晨 1:30 表达:

30 1 1,15 * *

20
投票

每两周星期五:

0 0 * * Fri [ $(expr $(date +%W) \% 2) -eq 1 ] && /path/to/command

发现于: https://cron.help/every-2-weeks-on-friday


7
投票
30 7 1-7,14-21 * 1

“每月 1 日至 7 日、每月 14 日至 21 日以及周一的每天 07:30。”


4
投票

我的 Ubuntu 18 上的 crontab 手册说:

注意:命令执行的日期可以通过两个字段指定 - 月份中的日期和星期几。如果两个字段都受到限制(i.e.,不是

*
),则当任一字段与当前时间匹配时将运行该命令。例如,
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"

2
投票

您需要指定开始日期。否则,它将始终重置为该月的第一天。 所以这个表达式“0 0 0 23/14 OCT ? 2017”是从 2017 年 10 月 23 日开始每两周一次


2
投票

我发现

0 */336 * * 1
是一个不错的技巧(每周一的第 14 天)。

(336 是 2 周内的小时数 - 即 24 x 14。)


0
投票

我的14天周期是这样的

# ----------- rsync backup job --------------
# this will execute the crontab if the week is even
50 17 * * 5 [ $(( $(date +\%V) \% 2 )) -eq 0 ] && /home/user/.backup/rsync_even.sh >> /home/user/.backup/rsync.log 2>&1
# this will execute the crontab if the week is odd
50 17 * * 5 [ $(( $(date +\%V) \% 2 )) -eq 1 ] && /home/user/.backup/rsync_odd.sh >> /home/user/.backup/rsync.log 2>&1

0
投票
0 3 */2 * 4

如果是星期四,则该活动将于每月第二天的 03:00 运行。理想情况下,每两周在星期四运行一次。

以星期四为例,一周是奇数(7天),每2天不会重复一个星期四,持续两周(14天)。如果您每两天跑步一次,持续 2 周,您将获得一天的出现次数。


0
投票

0 0 1 2/14 * ?
从每月第 2 天开始,每 14 天凌晨 01:00

我指定了该月的开始日期,这有帮助

© www.soinside.com 2019 - 2024. All rights reserved.