ubuntu 如何指导我的cron在每周五的奇数周和偶数周运行作业?

camsedfj  于 5个月前  发布在  其他
关注(0)|答案(2)|浏览(60)

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

  • 从周六到周四运行的“Test1”
  • “测试2”,运行在每周五偶数周
  • “测试3”,运行在奇数周在每个星期五我已经想出了如何安排从我的“测试1”工作从星期六到星期四像这样
    05 11 * * 5-4这是从星期六到星期四运行test1作业的命令

但是我不知道如何安排我的两个作业Test 2和Test 3,这样Test 2只在每周五的偶数周运行,Test 3只在每周五的奇数周运行。如果有人能为我的查询提供可能的解决方案,我将不胜感激

xvw2m8pv

xvw2m8pv1#

由于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


在偶数周内完成你的工作
您还可以执行以下操作(在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的结果(模运算符是%符号)它计算周数并将其除以2,将余数作为输出。
  • '+%W'date(1)命令的格式字符串,用于仅在日期输出中打印周数。这是周数的源。
3xiyfsfu

3xiyfsfu2#

我想你的意思是这个奇怪的例子:= 1不是0

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

字符串

相关问题