🇧🇷 O que são cron jobs? Aprenda de forma fácil
Vídeo no youtube: https://youtu.be/g69c8iUHhXk
Olá a todos, hoje trago-vos uma ferramenta muito interessante e útil no mundo do desenvolvimento: os cron jobs. Então, vamos começar!
O que é um cron job?
Primeiro, vamos separar e entender os termos: cron e job. Num contexto de programação, um job pode ser interpretado como uma tarefa simples, um pedaço de trabalho a ser feito. E cron é uma ferramenta de agendamento presente em sistemas Unix. Assim, o cron job pode ser entendido como uma tarefa agendada automaticamente. Você pode usar cron jobs para automatizar tarefas repetitivas, como atualizar software, limpar cache, criar backups, etc.
Criando um cron job usando o terminal
Em sistemas Unix, o cron é um daemon, um programa que roda em segundo plano. Você pode gerenciar seus cron jobs editando o arquivo cron no seu sistema operacional. No meu sistema operacional (Linux Mint), o arquivo está localizado em /var/spool/cron/crontabs/<seu-usuário>
. Mas existe um comando para facilitar a edição deste arquivo, que é crontab -e
(crontab
é uma versão abreviada de cron table). Ao executar este comando, o conteúdo do arquivo será exibido usando o seu editor padrão, no meu caso é o Vim. Agora, você pode adicionar as definições dos seus cron jobs no final do arquivo. O formato da definição se parece com isso:
* * * * * <comando>
O comando especificado será executado no intervalo definido pela sintaxe cron * * * * *
, neste caso, será executado a cada minuto. Ok, vamos entender o que significa esta sintaxe.
Cada asterisco representa um valor de tempo, nesta sequência:
(minuto) (hora) (dia do mês) (mês) (dia da semana) <comando>
Abaixo estão alguns exemplos para facilitar a compreensão:
0 0 * * 0 /root/backup.sh |
Realiza um backup todo domingo à meia-noite. |
---|---|
0 * * * 1 /root/clearcache.sh |
Limpa o cache a cada hora às segundas-feiras. |
0 6,18 * * * /root/backup.sh |
Faz backup dos dados duas vezes ao dia às 6h e às 18h. |
*/10 * * * * /scripts/monitor.sh |
Realiza monitoramento a cada 10 minutos |
Estes exemplos foram retirados de: https://www.hostinger.com/tutorials/cron-job.
Você pode brincar com isso usando o site crontab.guru.
Ok, voltando ao nosso terminal. Vamos criar um cron que roda a cada minuto e atualiza um arquivo de log chamado cron.log
com um texto simples. Primeiro, precisamos criar o arquivo bash com as instruções para o job. O nome do arquivo será cron.sh
e o conteúdo será:
echo "Olá pelo cron - $(date +"%Hh%M")" >> <caminho-para-o-seu-arquivo-cron.log>
Este comando irá adicionar ao final do arquivo cron.log um texto como este: Hello from cron - 14h22
.
Agora precisamos configurar o cron job para executar o arquivo cron.sh
a cada minuto. Antes de editar o arquivo cron, primeiro, precisamos dar permissão de execução ao arquivo cron.sh
usando o comando chmod +x cron.sh
. Agora, execute o comando crontab -e
novamente, vá até o final do arquivo e escreva isto:
* * * * * <caminho-para-o-seu-arquivo-cron.sh>
Salve as alterações e está feito, o seu cron está configurado. Agora, vamos verificar se está funcionando corretamente monitorando o conteúdo do nosso arquivo cron.log
.
tail -f cron.log
Depois de alguns minutos, o conteúdo do nosso arquivo deve parecer com isso:
Hello from cron - 14h:22
Hello from cron - 14h:23
Hello from cron - 14h:24
Hello from cron - 14h:25
Hello from cron - 14h:26
Conclusão
Parabéns, se você leu até aqui, agora você tem outro tópico para discutir no nosso jantar de família. Deixando as brincadeiras de lado, hoje você entendeu um conceito essencial do mundo da computação. Agora, comece a criar nossos jobs, e você não está limitado a escrever em arquivos bash, existem muitos pacotes que permitem que você execute cron jobs na sua linguagem de programação favorita. Espero que este artigo tenha sido útil para você. Deixe-me saber o que você achou nos comentários.
Referências
Gostaria de adicionar o repo de uma ui desenvolvida pra facilitar a vida de quem precisa trabalhar com o cron (eu trabalho com isso diariamente). crontab-ui O acesso pode ser feito via browser de outros computadores mediante uso de usuário/senha. Espero ter contribuído de alguma forma.
É possivel usar cron job para criar um backup de um DB ?