Refresh de um script R com Crontab


Este post será breve e com um objetivo específico. Vamos criar um refessh em um script R com o Crontab, entretanto, esse refresh como mencionado nesse post, nada mais é do que um agendamento de tarefas, no qual o Crontab irá executar a tarefa agendada, toda vez que a condição especificada ocorer.

O que é Crontab?

“O Cron é utilizado para agendar tarefas recorrentes, as tarefas são chamadas de cronjobs e são gerenciadas pelo crontab (tabela do cron).

Esta ferramenta vem instalada em diversas distribuições Linux, mas caso o Cron não esteja instalado na sua máquina é possível instalar através do comando abaixo (No Ubuntu)”:

# apt-get install cron

Para criar uma nova tarefa usamos o comando crontab -e que irá abrir o arquivo do cron para inserir o agendamento para o usuário atual.

# crontab -e
  • Se necessário usar o sudo nos comandos acima.

O crontab possui seis colunas, que correspondem aos minutos, horas, dias, meses, semanas e, por fim, aos comandos que serão executados.

Abaixo segue detalhes sobre eles:

  • Minuto: Valores de 0 a 59 ou *
  • Hora: Valores de 0 a 23 ou *
  • Dia: Valores de 1 a 31 ou *
  • Mês: Valores de 1 a 12, jan a dec ou *
  • Semana: 0 a 6, sun a sat ou * (0 e 7 representa Domingo)
  • Comando: O comando a ser executado ou script

O caractere asterisco (*) significa do primeiro ao último.

Com o arquivo do Crontab aberto vamos adicionar a seginte linha */15 * * * * Rscript script.R, após o Rscript coloca todo o caminho até o arquivo a ser executado, e nos minutos foram colocados ’*/15’ para o arquivo ser executado a cada 15 minutos.

# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command

*/15 * * * * Rscript 'script.R'

Script R

Vamos utilizar um script R que envia uma mensagem para o Telegram toda vez que for executado. Para isso, vou utilizar um Bot que criei no post anterior: https://jodavid.github.io/post/construindo-um-chatbot-para-telegram-com-r/

script.R:

# Pacote Necessário: telegram.bot

# Token do Bot:
bot <- telegram.bot::Bot(token = "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11")

# Adicionando id do Recepetor (abaixo como descobrir seu id no Telegram)
chatid <- "574895214" #id aleatório aqui

# Enviando o horário atual
bot$sendMessage(chat_id = chatid,
                text = format(Sys.time(), "%X")
                )

Como descobrir seu id

  1. Acesse esse link pelo Telegram: https://t.me/my_id_bot;
  2. Utiliza o /start;
  3. Seu id do Telegram vai aparecer na tela de conversa.

Com esse código acima, estando correto o token do bot e o id do receptor, a mensagem chegará no Telegram corretamente.

OBS.: É necessário interagir com o bot após a criação dele, para que as mensagens cheguem corretamente. Não fazendo isso, o bot não consegue enviar mensagens ao usuário.

Fontes:

https://medium.com/totvsdevelopers/entendendo-o-crontab-607bc9f00ed3

“Post gerado com framework HUGO (http://gohugo.io/), R Markdown (http://rmarkdown.rstudio.com/), no qual os resultados são gerados na geração da página.”

Post original:

https://jodavid.github.io/post/construindo-um-chatbot-para-telegram-com-r/

LinkedIndo autor:

https://www.linkedin.com/in/jodavidferreira/