Crontab no último dia do mês
Publicado em 5/11/2008 | Autor Márcio
Pesquisando na internet achei a solução proposta pelo Ataliba Teixeira que funciona muito bem por sinal, a qual reproduzo a seguir:
0 8 28-31 * * [ `date -d tomorrow +%e` -eq 1 ] && comando_do_ultimo_dia
Ele verifica se amanhã será dia 1º, se for ele executa o comando_do_ultimo_dia.
O problema é que eu queria fazer isso no Solaris 9 e o comando date no Solaris não tem a riqueza de funcionalidades do date do Linux.
Então criei uma outra solução, acho que mais genérica, que é a seguinte:
0 8 28-31 * * [ `cal | grep -v "^ " | tail -1 | awk '{print($NF)}'` -eq `date +%e` ] && comando_do_ultimo_dia
Em resumo:
cal lista um calendario do mês atual
tail -1 extrai a última linha deste calendário
awk ‘{print($NF)}’ extrai a última coluna desta linha, que é o último dia do mês
date +%e é o dia atual que é comparado com o último dia do mês atual
se forem iguais será executado o comando após o &&
6 comentários, comente você também!
Categoria: Curiosidades, Sistema Operacional, TodosTags: cal, crontab, date, Linux, solaris, último dia do mês
Comments
6 Responses to “Crontab no último dia do mês”
Deixe um comentário!


November 5th, 2008 @ 15:32
leia mais……
November 5th, 2008 @ 15:32
leia mais…..
March 31st, 2009 @ 10:55
Bastante últil esse comando.
Estou usando um debian, quando coloco o sinal de % ele interpreta como final de linha e não executa nada.
Tem alguma idéia de como solucionar isso?
Valew!
March 31st, 2009 @ 12:45
April 1st, 2009 @ 14:18
Obs.: fiz uma pequena correção no comando.
de
0 8 28-31 * * [ `cal | tail -1 | awk '{print($NF)}'` -eq `date +%e` ] && comando_do_ultimo_dia
para
0 8 28-31 * * [ `cal | grep -v "^ " | tail -1 | awk '{print($NF)}'` -eq `date +%e` ] && comando_do_ultimo_dia
August 12th, 2011 @ 10:02