A sintaxe que você tentou é realmente ambígua. Dependendo de quantos dias são no mês, alguns meses serão executados em dias ímpares e alguns em dias pares. Isso ocorre porque a maneira como é calculada leva o número total de posibilidades e as divide. Você pode ignorar esse comportamento distorcido especificando manualmente o intervalo de dias e usando um número ímpar ou par de dias. Como os scripts de um dia sequer 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 um número ímpar. execução de dia.
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 meses não tendo o mesmo número de dias não é importante aqui porque nenhum mês tem MAIS dias além disso e para fevereiro ruim, o intervalo de datas não irá corresponder ao último dia ou dois, mas fará nenhum dano ter listado.
A única 'pegadinha' para essa abordagem é que, se você estiver em um ciclo de dias ímpares, seguindo meses com 31 dias, seu comando também será executado no primeiro dia do mês. Da mesma forma, se você está forçando um ciclo par, cada ano bissexto causará um ciclo de três dias e o final de fevereiro. Você não pode realmente contornar o fato de que qualquer padrão regular de "todos os dias" nem sempre vai cair em dias pares ou ímpares em todos os meses e de qualquer forma que você forçar isso, você terá uma corrida extra ou perderá uma corrida entre meses com contagens de dias sem correspondência.