如何指示我的 cron 在每个星期五的奇数周和偶数周运行作业?

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

我的系统上正在运行三个作业,名称如下

  • “测试 1”从周六到周四运行

  • “Test2”在每个星期五的偶数周运行

  • “Test3”在每个星期五的奇数周运行 我已经弄清楚如何从周六到周四安排我的“Test1”工作

    05 11 * * 5-4 这是从周六到周四运行我的 test1 作业的命令

但是我无法弄清楚如何安排我的两个作业 Test2 和 Test3,以便 Test2 仅在偶数周的每个星期五运行,而 Test3 仅在每个星期五的每个奇数周运行。如果有人能为我的查询提供可能的解决方案,我将不胜感激

linux ubuntu cron cron-task
2个回答
0
投票

由于 crontab 格式中没有周数字段,因此无法安排 cron 来安排奇数周数(或偶数周数)。该解决方案需要每周执行 cronjob 并在调用作业之前确定该周是奇数还是偶数,这在下面完成。

首先我们准备一个 cron 作业,在一年中的每个星期五 03:00 执行(您可以选择其他时间:))

0 3 * * 5 my_weekly_cron

并在

my_weekly_cron
(在开头)中包含以下内容:

# this will make the job to exit if the week number is even.
[ $(expr $(date '+%W') % 2) = 0 ] && exit

在奇数周内执行你的 cronjob。

或者

# this will make the job to exit if the week number is odd.
[ $(expr $(date '+%W') % 2) = 0 ] || exit

在偶数周内执行你的 cronjob。

您还可以执行以下操作(将您的测试包含在 crontab 条目中,这样您就不必接触 cron 脚本本身)

# this will execute the crontab if the week is even
0 3 * * 5 [ $(expr $(date '+%W') % 2) = 0 ] && my_biweekly_cron

将在偶数周内执行

my_biweekly_cron
,而

# this will execute the crontab if the week is odd
0 3 * * 5 [ $(expr $(date '+%W') % 2) = 0 ] || my_biweekly_cron

将在奇数周内执行。

说明

  • [
    test(1)
    命令。允许在 shell 脚本中进行布尔测试。它用于测试周数除以 2 的结果是否为
    0
    作为余数。
  • expr(1)
    允许计算表达式,例如检查周数模 2 的结果(模运算符是
    %
    符号)它计算周数并将其除以二,将余数作为输出。
  • '+%W'
    date(1)
    命令的格式字符串,仅在日期输出中打印周数。这是周数的来源。

0
投票

我认为你的意思是奇怪的例子:= 1 而不是 0

如果一周是奇数,这将执行 crontab

0 3 * * 5 [ $(expr $(日期 '+%W') % 2) = 1 ] || my_biweekly_cron

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