Cronjob запускается каждые две недели, в субботу, начиная с этой субботы

Сегодня пятница, 3 октября 2014 г. 3:58

Я хочу запланировать такой cronjob, чтобы он запускался на следующие даты:

  1. Суббота, 4 октября 2014 г., 8:00
  2. Суббота, 18 октября 2014 г., 8:00
  3. Суббота, 1 ноября 2014 г., 8:00 утра......

Так что каждые 2 недели, в субботу, в 8 часов.

2 ответа

Решение
0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 && yourCommand

date +%W: номер недели в году с понедельником в качестве первого дня недели, сегодня неделя 39

10#$(date +%W): конвертировать date +W до десятичного числа и избежать путаницы при разборе базы оболочки

$((39%2)): операция по модулю: результат равен 0 (четный номер недели) или 1 (нечетный номер недели), результат этой недели равен 1, следующая неделя 0

test 1 -eq 1: арифметический тест (равный), в этом случае результат - булево значение true

&& yourCommand: Логическое И: беги yourCommand только если результат предыдущей команды был логическим значением true

Обратите внимание, что год может получить две нечетные недели: 53 (в этом году) и 1 (в следующем году)

То, что вы показали, это "каждую неделю". Тогда код:

0 8 * * 6

Вы уверены, что вам нужно запускать его каждые две недели?

0 8 * * 6 expr `date +\%s` / 604800 \% 2 >/dev/null || yourCommand
Другие вопросы по тегам