Agendando seus scripts com Cron

Introdução ao Bash Scripting

Alex Scriven

Data Scientist

Por que agendar scripts?

 

Há muitas situações em que agendar scripts é útil:

  1. Tarefas recorrentes que precisam ser feitas — talvez diariamente, semanalmente ou várias vezes ao dia.
    • Você pode criar um lembrete no calendário, mas e se esquecer!?
  2. Uso ideal de recursos (rodar scripts de madrugada)

Agendar scripts com cron é essencial para conhecer infraestruturas de dados modernas.

Introdução ao Bash Scripting

O que é cron?

 

O Cron faz parte de sistemas tipo Unix desde os anos 70. Humanos são preguiçosos há tanto tempo!

O nome vem do grego para tempo, "chronos".

Ele é guiado por algo chamado crontab, um arquivo que contém cronjobs, e cada um diz ao crontab que código rodar e quando.

Introdução ao Bash Scripting

Crontab — o motor dos cronjobs

 

Você pode ver quais agendamentos (cronjobs) estão programados com o comando:

crontab -l
crontab: no crontab for user

Parece que precisamos criar um agendamento (cronjob)!

Introdução ao Bash Scripting

Estrutura de crontab e cronjob

Esta ótima imagem da Wikipedia mostra como construir um cronjob dentro do arquivo crontab. Você pode ter muitos cronjobs, um por linha.

Estrutura de um crontab

  • Há 5 estrelas para definir, uma para cada unidade de tempo
  • O padrão, *, significa "todo"
Introdução ao Bash Scripting

Exemplo de cronjob

Vamos ver alguns exemplos de cronjob:

5 1 * * * bash myscript.sh

  • A estrela de minutos é 5 (5 minutos após a hora). A de horas é 1 (1h). As três últimas são *, então todo dia e mês
    • No geral: rodar todo dia às 1:05.

 

15 14 * * 7 bash myscript.sh

  • Minutos é 15 (15 minutos após a hora). Horas é 14 (14h). As próximas duas são * (todo dia do mês, todo mês). A última é dia 7 (aos domingos).
    • No geral: rodar todo domingo às 14:15.
Introdução ao Bash Scripting

Estrutura avançada de cronjob

Se você quiser rodar algo várias vezes por dia ou a cada "X" intervalos, isso também é possível:

  • Use vírgula para intervalos específicos. Por exemplo:
    • 15,30,45 * * * * roda nos minutos 15, 30 e 45, para as horas definidas pela segunda estrela. Aqui é toda hora, todo dia etc.
  • Use barra para "a cada X". Por exemplo:
    • */15 * * * * roda a cada 15 minutos. Também para toda hora, dia etc.
Introdução ao Bash Scripting

Seu primeiro cronjob

Vamos agendar um script chamado extract_data.sh para rodar todo dia às 1h30. Siga estes passos:

  1. No terminal, digite crontab -e para editar sua lista de cronjobs.
    • Pode perguntar qual editor você quer usar. nano é uma opção fácil e com curva de aprendizado menor que vi (vim).
  2. Crie o cronjob:
    • 30 1 * * * extract_data.sh
Introdução ao Bash Scripting

Seu primeiro cron job

3. Saia do editor salvando

Se estiver usando nano (no Mac), use ctrl + o, depois enter, e ctrl + x para sair.

Você verá a mensagem crontab: installing new crontab

4. Confira se está lá rodando crontab -l.

30 1 * * * extract_data.sh

Bom trabalho!

Introdução ao Bash Scripting

Vamos praticar!

Introdução ao Bash Scripting

Preparing Video For Download...