Crontab no último dia do mês

Publicado em 5/11/2008 | Autor Márcio




Como agendar um comando na crontab para ser executado no último dia do mês, se existem meses com 28, 30 e 31 dias?

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 &&

Comments

6 Responses to “Crontab no último dia do mês”

  1. Vicente via Rec6
    November 5th, 2008 @ 15:32
    Executando um comando na crontab no último dia do mês…

    leia mais……

  2. vicentesloboda no diHITT
    November 5th, 2008 @ 15:32
    Executando um comando na crontab no último dia do mês…

    leia mais…..

  3. Tiago Vital
    March 31st, 2009 @ 10:55
    Olá, Márcio
    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!
  4. Marcio Jose da Rocha
    March 31st, 2009 @ 12:45
    Testei em uma máquina com Debian (4.1.1-21) e não apresentou este problema. Você tem como dar mais detalhes?
  5. Márcio
    April 1st, 2009 @ 14:18
    digite uma \ (contra-barra) antes do % (percentual) para tirar a função especial do caracter (http://aurelio.net/shell/canivete.html#metacaracteres).

    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

  6. O que acontece na blogosfera e na internet passa aqui.
    August 12th, 2011 @ 10:02
    [...] como montar um computador) já para os que tem tem um pouco mais de conhecimento e quer saber como configurar o Crontab do Linux acesse o blogdovicente, mas internet que se prece tem muito mais que só notícia de [...]

Deixe um comentário!