Data para crontab [RESOLVIDO]

1. Data para crontab [RESOLVIDO]

Rodrigo Campos
rodrigocamposdf

(usa CentOS)

Enviado em 27/10/2016 - 00:48h

Boa noite! Como faço para o crontab executar um script na ultima quinta-feira do mês?


  


2. MELHOR RESPOSTA

thinomar
thinomar

(usa Linux Mint)

Enviado em 27/10/2016 - 10:41h

Fiz assim:
[[ $(date '+%A') == 'Thursday' && $(echo "$(cal | tac | awk 'NR==1 {print $(NF)}') - $(date '+%d')" | bc -l) -lt 7 ]] && echo "Última quinta é hoje" 

Explicando:
[[ condicao ]] && comando: É uma das sintaxes de teste. Se a condição for verdadeira, ele executa o que tem depois do "&&". É possível adicionar o que executar caso a condição seja falsa, utilizando o "||" ao invés do "&&". Exemplo: [[ $numero -eq 5 ]] && echo "É 5" || echo "Não é 5". Isso é chamado de "operação condicional tenária".

$(date '+%A') == 'Thursday': Verifica se hoje é Quinta (Thursday em inglês)

$(echo "$(cal | tac | awk 'NR==1 {print $(NF)}') - $(date '+%d')" | bc -l) -lt 7: Subtrai o dia atual (date '+%d') do último dia do mês (cal | tac | awk 'NR==1 {print $(NF)}') e verifica se restam menos de 7 dias (1 semana) para acabar o mês.

&& dentro da condição: Equivale ao AND, assim como o "||" equivale ao OR e o "!", ao NOT.

RESUMO DO COMANDO:
Se hoje for quinta-feira e restarem menos de 7 dias para acabar o mês, hoje é a última quinta feira do mês, então executo o que tem de ser executado.

EDIT:
Não sei se ajuda a compreender melhor, mas o comando funciona exatamente assim:
#!/bin/bash

weekday=$(date '+%A')
last_day=$(cal | tac | awk 'NR==1 {print $(NF)}')
today=$(date '+%d')
remaining_days=$(echo "$last_day - $today" | bc -l)

if [[ $weekday == 'Thursday' && $remaining_days -lt 7 ]]
then
echo "Última quinta é hoje"
fi


3. Re: Data para crontab [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 27/10/2016 - 01:07h

rodrigocamposdf escreveu:

Boa noite! Como faço para o crontab executar um script na ultima quinta-feira do mês?


velho ... acho q vc teria q bolar um script para manipular datas ... tipo um script q rode todo dia e teste para ver se é a ultima quinta feira do mês, se for a ultima, aí ele roda ou outro script ou roda um "else"

___________________________________________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


4. Re: Data para crontab [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/10/2016 - 01:47h

rodrigocamposdf escreveu:

Boa noite! Como faço para o crontab executar um script na ultima quinta-feira do mês?


======================================================
Boa noite Rodrigo.
Segue comando para "pegar" a ultima Quinta-Feira do Mês atual:
cal 2016|cut -d" " -f5|sed '/^$/d'|tail -n1 

Todos os Meses . . .
for ((MM=1;MM<=12;MM++));do echo "$MM: $(cal $MM 2016|cut -d" " -f5|sed '/^$/d'|tail -n1)";done 


att.:
Marcelo Oliver




5. Re: Data para crontab [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 27/10/2016 - 02:38h

Aproveitando o comando q o marcelo mandou e aproveitando para treinar ... fiz um script aqui que deve te atender ... coloque o script para rodar todo dia

#!/bin/bash
quinta=$(cal 2016|cut -d" " -f5|sed '/^$/d'|tail -n1)
hoje=$(date +%d)
if [ "$quinta" != "$hoje" ]; then
$caminho/do/script
fi
exit


OBS: Marcelo .... Fiz certo ?????
___________________________________________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


6. Crontab

Rodrigo Campos
rodrigocamposdf

(usa CentOS)

Enviado em 27/10/2016 - 11:16h

Galera, muito obrigado pelo apoio! Todas respostas foram totalmente úteis, porém a do thinomar foi muito bem explicativa e foi a que utilizei.
Abraço a todos.


7. Re: Data para crontab [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/10/2016 - 12:45h

Mauriciodez escreveu:

Aproveitando o comando q o marcelo mandou e aproveitando para treinar ... fiz um script aqui que deve te atender ... coloque o script para rodar todo dia

#!/bin/bash
quinta=$(cal 2016|cut -d" " -f5|sed '/^$/d'|tail -n1)
hoje=$(date +%d)
if [ "$quinta" != "$hoje" ]; then
$caminho/do/script
fi
exit


OBS: Marcelo .... Fiz certo ?????
___________________________________________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

===================================================================
Falae Mauricio . . .
Primeiro, tem que "arrumar meu comando", senão a COMPARAÇãO acusa ERRO,
Devido a saída COLORIDA do "cal" para o dia atual . . . .
É só colocar um "-h"
quinta=$(cal -h|cut -d" " -f5|sed '/^$/d'|tail -n1)
Esse "$caminho/do/script", é o SCRIPT para rodar se é a ULTIMA QUINTA?
Se for, a lógica esta invertida, veja:
[ "$quinta" != "$hoje" ] # Se $quinta é DIFERENTE de $hoje . . .
Deveria ser:
[ "$quinta" -eq "$hoje" ] # Se $quinta é IGUAL a $hoje . . .

[code]#!/bin/bash
quinta=$(cal -h|cut -d" " -f5|sed '/^$/d'|tail -n1)
hoje=$(date +%d)
[ "$quinta" -eq "$hoje" ] && echo -e "Hoje é Quinta Feira\n"

A lógica está mto boa!!!!
Clara, curta, direta e objetiva.....

mso



8. O script não funcionou hoje.

Rodrigo Campos
rodrigocamposdf

(usa CentOS)

Enviado em 01/12/2016 - 10:48h

Olá amigos, bom dia.
Criamos um script que era para ser executado na ultima quinta feira de cada mês, porém o script foi executado hoje que é na verdade a primeira quinta do mês.
Será que você podem nos ajudar ?






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts