我的系统上正在运行三个作业,名称如下
“测试 1”从周六到周四运行
“Test2”在每个星期五的偶数周运行
“Test3”在每个星期五的奇数周运行 我已经弄清楚如何从周六到周四安排我的“Test1”工作
05 11 * * 5-4 这是从周六到周四运行我的 test1 作业的命令
但是我无法弄清楚如何安排我的两个作业 Test2 和 Test3,以便 Test2 仅在偶数周的每个星期五运行,而 Test3 仅在每个星期五的每个奇数周运行。如果有人能为我的查询提供可能的解决方案,我将不胜感激
由于 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)
命令的格式字符串,仅在日期输出中打印周数。这是周数的来源。我认为你的意思是奇怪的例子:= 1 而不是 0
0 3 * * 5 [ $(expr $(日期 '+%W') % 2) = 1 ] || my_biweekly_cron