Answers:
0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 && yourCommand
date +%W
:年的周数,星期一为一周的第一天,今天为第39周
10#$(date +%W)
:date +W
将十进制数转换为十进制数,并避免shell基础解析混乱
$((39%2))
:模运算:结果为0(偶数周数)或1(奇数周数),本周结果为1,下周为0
test 1 -eq 1
:算术测试(相等),在这种情况下结果为布尔值true
&& yourCommand
:布尔值AND:yourCommand
仅在上一个命令的结果为布尔值true时运行
请注意,这一年可以得到两个奇数周:53(今年)和1(下一年)
0 8 * * 6 test $(($(date +\%W)\%2)) -eq 1 && yourCommand
$((10#$(date +%W)%2)) -eq 1 && echo OK
我的shell 时,我试图执行周计算的结果:-bash: 1: command not found
。任何线索为什么这样做?谢谢。
test
是用户,不是命令。试试:test $((10#$(date +\%W)%2)) -eq 1 && echo odd || echo even
您显示的是“每周”。然后代码是:
0 8 * * 6
您确定需要每两周运行一次吗?
0 8 * * 6 expr `date +\%s` / 604800 \% 2 >/dev/null || yourCommand
echo $?
在运行该命令后,看到它的返回码-这就是是很重要