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