今天是 2014 年 10 月 3 日星期五 上午 3:58
我想安排一个这样的 cronjob 在以下日期运行它:
- 2014 年 10 月 4 日星期六上午 8:00
- 2014 年 10 月 18 日星期六上午 8:00
- 2014 年 11 月 1 日星期六上午 8:00......
所以每两周,星期六,晚上 8 点。
答案1
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
:布尔与:yourCommand
仅当前一个命令的结果为布尔真时才运行
请注意,年份可以有两个奇数周:53(今年)和 1(明年)
答案2
你显示的是“每周”。那么代码是:
0 8 * * 6
您确定需要每两周运行一次吗?
0 8 * * 6 expr `date +\%s` / 604800 \% 2 >/dev/null || yourCommand