Cronjob 每两周运行一次,从本周六开始

kup*_*upa 12 linux cron scheduler

今天是 2014 年 10 月 3 日星期五凌晨 3:58

我想安排一个像这样的 cronjob 在以下日期运行它:

  1. 2014 年 10 月 4 日星期六 8:00
  2. 2014 年 10 月 18 日星期六 8:00
  3. 2014 年 11 月 1 日星期六上午 8:00 ... ...

所以每两周一次,在星期六,在 8 点。

Cyr*_*rus 29

0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 && yourCommand
Run Code Online (Sandbox Code Playgroud)

date +%W: 一年中的周数,星期一作为一周的第一天,今天是第 39 周

10#$(date +%W): 转换date +W为十进制数并避免 shell base 解析混淆

$((39%2)): 模运算:结果为 0(偶数周数)或 1(奇数周数),本周结果为 1,下周为 0

test 1 -eq 1: 算术测试(相等),在这种情况下结果是布尔真

&& yourCommand: Boolean AND:yourCommand仅在上一个命令的结果为 boolean true 时运行

请注意,年份可以有两个奇数周:53(今年)和 1(明年)

  • @jhuet:`test` 不是用户,它是一个命令。尝试:`test $((10#$(date +\%W)%2)) -eq 1 && echoodd || 回声均匀` (3认同)
  • 那很优雅!正如你所指出的,它仍然在一年中的第 53 个星期六有一个角落案例,每四个世纪大约会发生七十年。 (2认同)

Glu*_*eon 5

你所展示的是“每周”。那么代码是:

0 8 * * 6
Run Code Online (Sandbox Code Playgroud)

您确定需要每两周运行一次吗?

0 8 * * 6 expr `date +\%s` / 604800 \% 2 >/dev/null || yourCommand
Run Code Online (Sandbox Code Playgroud)