Синтаксис, який ви спробували, насправді неоднозначний. Залежно від того, скільки днів у місяці, в деяких місяцях воно буде працювати в непарні дні, а в деяких парні. Це тому, що спосіб його обчислення займає загальну кількість можливостей і ділить їх. Ви можете подолати цю страхітливу поведінку, вручну вказавши діапазон днів і використовуючи непарне або парне число днів. Оскільки сценарії навіть денного дня ніколи не працюватимуть на 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
Ваша турбота про те, що місяці не матимуть однакову кількість днів, тут не важливі, оскільки в місяцях немає БОЛЬШИХ днів, ніж цей, а для поганого лютого діапазон дат ніколи не відповідатиме останній день чи два, але це не принесе шкоди, коли вона перерахована.
Єдиний "gotcha" для цього підходу полягає в тому, що якщо ви перебуваєте на циклі непарних днів, наступні місяці з 31 днями ваша команда також буде працювати першого місяця. Так само, якщо ви змушуєте рівномірний цикл, кожен високосний рік спричинятиме один триденний цикл і кінець лютого. Ви дійсно не можете обійти той факт, що будь-який регулярний зразок "через день" не завжди випаде на парні або непарні дні кожного місяця, і будь-яким способом, який ви змусите це, у вас буде або зайвий пробіг, або пропущений пробіг між місяці з рахунком пропущених днів.