Назад | Перейти на главную страницу

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

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

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

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

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

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