A sintaxe que você tentou é realmente ambígua. Dependendo de quantos dias há no mês, alguns meses serão executados em dias ímpares e outros em pares. Isso ocorre porque a maneira como é calculada pega o número total de possibilidades e as divide. Você pode substituir esse comportamento de estratificação, especificando manualmente o intervalo de dias e usando um número ímpar ou par de dias. Como os scripts de dia par nunca seriam executados no 31º dia de meses mais longos, você não perde nada usando 30 dias como base para dias pares, e especificando especificamente para dividi-lo como se houvesse 31 dias, você pode forçar impares dias de execução.
A sintaxe ficaria assim:
# Will only run on odd days:
0 0 1-31/2 * * command
# Will only run on even days:
0 0 2-30/2 * * command
Sua preocupação com os meses que não têm o mesmo número de dias não é importante aqui, porque não há meses com mais dias do que isso e, para fevereiro ruim, o período não coincide com o último dia ou dois, mas não fará mal a ninguém. listado.
A única 'pegadinha' dessa abordagem é que, se você estiver em um ciclo de dias ímpares, após meses com 31 dias, seu comando também será executado no primeiro dia do mês. Da mesma forma, se você estiver forçando um ciclo uniforme, cada ano bissexto causará um ciclo de três dias e o final de fevereiro. Você realmente não pode contornar o fato de que qualquer padrão regular de "todos os dias" nem sempre cai em dias pares ou ímpares todos os meses e, de qualquer forma que forçar isso, você terá uma corrida extra ou perderá uma corrida entre meses com contagem incorreta de dias.