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