Синтаксис, который вы пробовали, на самом деле неоднозначен. В зависимости от того, сколько дней в месяце, некоторые месяцы будут работать в нечетные дни, а некоторые - в четные. Это потому, что способ расчета рассчитывает общее количество возможностей и разделяет их. Вы можете переопределить это поведение strage-ish, вручную указав диапазон дней и используя нечетное или четное количество дней. Поскольку четные дневные сценарии никогда не будут выполняться в 31-й день более длинных месяцев, вы ничего не потеряете, используя 30 дней в качестве основы для четных дней, и, указав специально для деления, как если бы было 31 день, вы можете вызвать нечетные исполнение.
Синтаксис будет выглядеть так:
# Will only run on odd days:
0 0 1-31/2 * * command
# Will only run on even days:
0 0 2-30/2 * * command
Ваше беспокойство по поводу того, что месяцы не имеют одинакового количества дней, здесь не имеет значения, потому что ни в одном месяце не будет БОЛЬШЕ дней, чем этот, а для плохого февраля диапазон дат просто не будет совпадать с последним днем или двумя, но это не принесет вреда, если это в списке.
Единственный «уловка» для этого подхода состоит в том, что если вы находитесь в нечетном цикле дня, в следующие месяцы с 31 днем ваша команда также будет выполняться в первом месяце. Точно так же, если вы выполняете четный цикл, каждый високосный год будет вызывать один трехдневный цикл и конец февраля. Вы не можете обойти тот факт, что любой регулярный паттерн «каждый второй день» не всегда будет приходиться на четные или нечетные дни в каждом месяце, и как бы вы ни принудили это сделать, у вас либо будет дополнительный прогон, либо вы пропустите пробежку между месяцы с несоответствующим количеством дней.