Сегодня пятница, 3 октября 2014 г., 3:58.
Я хочу запланировать такую cronjob, чтобы запускать ее в следующие даты:
Так что каждые 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