Script a ser executado num determinado dia. [RESOLVIDO]

1. Script a ser executado num determinado dia. [RESOLVIDO]

Geraldo Augusto de Oliveira Quites
geraldoquites

(usa Suse)

Enviado em 11/02/2015 - 09:15h

Caros amigos, preciso criar um script que seja executado na segunda terça feira de cada mês o ano todo. Por ex.: em março ele será executado no dia 09/03/2015. Eu sei que poderia criar no crontab 12 regras e assim estaria resolvido, mas como não gostamos de facilidades,. queria criar um script que executaria automaticamente. Não tenho ideia como fazer esse script. Se você tem um norte e puder me ajudar, ficarei grato.
Obrigado.

Geraldo.


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 11/02/2015 - 11:48h

geraldoquites escreveu:

Caros amigos, preciso criar um script que seja executado na segunda terça feira de cada mês o ano todo. Por ex.: em março ele será executado no dia 09/03/2015. Eu sei que poderia criar no crontab 12 regras e assim estaria resolvido, mas como não gostamos de facilidades,. queria criar um script que executaria automaticamente. Não tenho ideia como fazer esse script. Se você tem um norte e puder me ajudar, ficarei grato.
Obrigado.

Geraldo.


Faça o cron executar o script todos os dias e o script se encarrega de testar se a data corrente corresponde a segunda terça-feira do mês. Exemplo com o date:


week_day=2 # Tuesday
first_month_day=$(date -d'this month' +%Y%d01)
read limit_day limit_week_day < <(date -d$first_month_day' + 13 day' +'%Y%m%d %w')
let 'diff_days = limit_week_day - week_day'
second_tuesday=$(date -d$limit_day' - '$diff_days' day' +%Y%m%d)



3. Re: Script a ser executado num determinado dia. [RESOLVIDO]

Geraldo Augusto de Oliveira Quites
geraldoquites

(usa Suse)

Enviado em 11/02/2015 - 13:25h

Olá textmode, você como sempre me ajudando.

Tentei acompanhar a lógica de seu scritp, mas meu conhecimento ainda é pouco para decifrá-lo.

A minha pergunta é:
Se o resultado deste script for verdadeiro, ela encaminhará um email, caso contrário não fará nada.
Onde vejo o resultado em data deste script? - acredito quer será um "echo $....."
Onde um incluo a linha do email neste scritp caso seja verdadeiro?

Obrigado,

Geraldo.





4. Re: Script a ser executado num determinado dia. [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 11/02/2015 - 14:19h

geraldoquites escreveu:

Olá textmode, você como sempre me ajudando.

Tentei acompanhar a lógica de seu scritp, mas meu conhecimento ainda é pouco para decifrá-lo.

A minha pergunta é:
Se o resultado deste script for verdadeiro, ela encaminhará um email, caso contrário não fará nada.
Onde vejo o resultado em data deste script? - acredito quer será um "echo $....."
Onde um incluo a linha do email neste scritp caso seja verdadeiro?

Obrigado,

Geraldo.



A ideia desse método consiste em descobrir qual é a segunda terça-feira do mês que ocorre até o décimo quarto dia. Pensando assim, precisamod descobrir primeiro qual é o primeiro dia do mês e somar 13 dias, daí precisamos saber também que dia da semana corresponde ao décimo quarto dia, neste mês corresponde a sábado, logo, para descobrirmos que dia será a segunda terça-feira, precisamos subtrair, neste mês, quatro dias. O código é uma abstração dessa ideia. Até pesquisei na net se tinha algo mais simples com o date mas não achei, então resolvi utilizar o modelo que o remind usa mas ele já faz os cálculos internamente, às vezes o uso como complemento ao cron mas apenas em userland porque ele não é tão estável quanto o crond.

Para fazer as comparações, você precisa ainda perguntar se o dia corrente corresponde a segunda terça-feira do mês, exemplo:


if [[ $(date +%Y%m%d) -eq $second_tuesday ]]; then
# executa o procedimento
:
else
echo 'Não é a segunda terça-feira do mês'
fi


Quanto ao envio de e-mail, é um assunto novo na discussão. Você quer que o script também envie e-mails caso o procedimento seja executado? Não seria melhor mandar registrar a execução (logs)?



5. Re: Script a ser executado num determinado dia. [RESOLVIDO]

Geraldo Augusto de Oliveira Quites
geraldoquites

(usa Suse)

Enviado em 11/02/2015 - 14:35h

Amigo, juntei os seus dois scripts da seguinte forma e alterei a data de meu servidor para 10/02/2015 (segunda terça-feira do mês)
Ao rodá-lo ele fala que o resultado não é verdadeiro e da a mensagem que "não é a segunda terça feira do mês"

Segui juntada e alteração do email do script.

#!/bin/bash
week_day=2 # Tuesday
first_month_day=$(date -d'this month' +%Y%d01)
read limit_day limit_week_day < <(date -d$first_month_day' + 13 day' +'%Y%m%d %w')
let 'diff_days = limit_week_day - week_day'
second_tuesday=$(date -d$limit_day' - '$diff_days' day' +%Y%m%d)

if [[ $(date +%Y%m%d) -eq $second_tuesday ]]; then
# executa o procedimento
:
echo "Mensagem !!!" | mail -s "Mensagem de doacao" geraldo.quites@contabilidadeitabirito.com.br
else
echo 'nao eh a segunda terca feira do mes'

fi





6. Re: Script a ser executado num determinado dia. [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 11/02/2015 - 15:10h

Faça a depuração do script usando 'echo' ou 'set -x' para saber o que cada variável recebeu como valor.


7. Re: Script a ser executado num determinado dia. [RESOLVIDO]

Geraldo Augusto de Oliveira Quites
geraldoquites

(usa Suse)

Enviado em 11/02/2015 - 15:31h

Olha os resultados:
week_day 2
first_month_day 20151001
second_tuesday 20151013
Date 20150210

Ele está tratando o "first" e o "second" como mês de outubro.




8. Re: Script a ser executado num determinado dia. [RESOLVIDO]

Geraldo Augusto de Oliveira Quites
geraldoquites

(usa Suse)

Enviado em 11/02/2015 - 15:41h

Textmode, muito obrigado mais uma vez pela paciência e ajuda na solução de mais um script.
Que seus conhecimentos sejam cada vez maiores.

tinha uma variável com problema: first_month_day=$(date -d'this month' +%Y%d01)
alterei para %Y%m01

Funcionou legal.

Muito obrigado.




9. Re: Script a ser executado num determinado dia. [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 11/02/2015 - 16:36h

geraldoquites escreveu:

Textmode, muito obrigado mais uma vez pela paciência e ajuda na solução de mais um script.
Que seus conhecimentos sejam cada vez maiores.

tinha uma variável com problema: first_month_day=$(date -d'this month' +%Y%d01)
alterei para %Y%m01

Funcionou legal.

Muito obrigado.



Xii, e eu cheguei a dar uma revisada antes de postar para não ter erros, foi mals!



10. Re: Script a ser executado num determinado dia. [RESOLVIDO]

Geraldo Augusto de Oliveira Quites
geraldoquites

(usa Suse)

Enviado em 11/02/2015 - 17:11h

Amigo, textmode... nada de "foi mals", você tem me ajudado muito.

A coisa mais fantástica e ter conhecimento e ter humildade de passá-lo aos outros.

Valeu!!!







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts