Não, 31 significa 31.
No entanto, você pode fazer alguns truques. Defina o trabalho para ser executado em qualquer dia que possa ser o último dia do mês (ou seja, 28-31 no campo do dia do mês) e, em seguida, substitua o comando por uma expressão shell que inclua um teste na data que protege o comando:
0 0 28-31 * * [" date +%m
"!=" date --date=tomorrow +%m
"] & & comando
A expressão dentro dos colchetes de teste apenas pergunta se o número do mês de hoje é diferente do número do mês de amanhã, o que obviamente só será verdadeiro no último dia do mês. Note que a forma desta expressão depende do seu local date
- você pode precisar ajustá-la se você não tiver a versão atual do GNU.
Eu deveria dizer que eu não inventei isso - eu achei isso com um google rápido (que o pôster original deveria ter feito ele mesmo, um pôster ruim!) em um post na lista de discussão por um Matthew Jarvis. Eu imagino que isso é muito mais do que um truque padrão do antigo feitiço unix.