Cola rápida para criar Cron Jobs

Como eu não crio Cron jobs com muita frequência, sempre que preciso criar um novo, tenho que pesquisar na internet, pois já esqueci os passos de como criá-lo. Por que não pesquisar direto no meu blog?

As instruções abaixo são baseados no linux CentOS.

Motivação

A motivação para escrever esse post, foi para criar um Cron para ser executado de hora em hora no Heroku, pois o Add-on Cron do Heroku só é gratuito para uma execução por dia, eu precisava executar de hora em hora.

Para isso criei um Cron que invoca a minha url no Heroku de hora em hora.

#! /bin/sh
wget pablocantero.com/service

Como fazer de graça?

Existem serviços gratuitos na internet para isso, como o www.mywebcron.com, que pode ser uma opção interessante para invocar urls de tempos em tempos.

Crontab

Para criar um Cron, você pode utilizar o programa Crontab.

crontab usage: crontab [-u user] file
 crontab [-u user] [ -e | -l | -r ]
 (default operation is replace, per 1003.2)
 -e  (edit user's crontab)
 -l  (list user's crontab)
 -r  (delete user's crontab)
 -i  (prompt before deleting user's crontab)
 -s  (selinux context)

Editando com o Vi

No CentOS por padrão ao usar o crontab -e, abrirá o Nano, que não estou muito acostumado. Portanto prefiro editar com o Vi, para isso basta abrir diretamente o arquivo Cron do usuário.

O arquivo Cron do usuário fica no caminho /var/spool/cron/, no meu caso o root.

vi /var/spool/cron/root

**Diretórios auxiliares

Qualquer script que esteja nos diretórios abaixo será executado de hora em hora, diariamente, semanalmente ou mensalmente, de acordo com o diretório.

  • /etc/cron.hourly - De hora em hora
  • /etc/cron.daily - Diariamente
  • /etc/cron.weekly - Semanalmente
  • /etc/cron.monthly - Mensalmente

Essa configuração fica no arquivo /etc/crontab.

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
21 * * * * root run-parts /etc/cron.hourly
35 1 * * * root run-parts /etc/cron.daily
58 5 * * 0 root run-parts /etc/cron.weekly
23 2 18 * * root run-parts /etc/cron.monthly

Parâmetros para criar um Cron

A configuração de um Cron é feita com o seguinte padrão.

[minutos] [horas] [dias do mês] [mês] [dias da semana] [usuário] [comando]

Sendo

Minuto: 0-59 Hora: 0-23 Dia do mês: 1-31 Mês: 1-12 Dia da semana: 0-6, onde domingo = 0, segunda = 1 etc

Exemplo de Cron

Para executar um script que recupera o resultado da Mega Sena no site Caixa. Precisamos executar um script Web scraping, das 18h até 22h, toda quarta-feira e sábado. Que é quando ocorre os sorteios da Mega Sena.

Para isso teremos que adicionar a seguinte configuração.

vi /var/spool/cron/root
# No final do arquivo adicionar
59 17,18,19,20,21,22 * * 3,6 /meus_scripts/megasena_web_scraping.sh

O megasena_web_scraping.sh será executado 17:59, 18:59, 19:59, 20:59, 21:59 e 22:50, toda quarta-feira = 3 e sábado = 6

Seguindo o comentário do @nadilsons, também possível gerenciar os intervalos com 17-22, simplificando o Cron acima.

59 17-22 * * 3,6 /meus_scripts/megasena_web_scraping.sh

Lembre-se que é importante definir o parâmetro minuto, pois se deixar com *, o script será executado de minuto em minuto.

Executando em intervalo de minutos

Se somente o parâmetro de minuto estiver configurado, isso não fará que o script seja executado a cada minuto, na verdade ele será executado sempre no minuto configurado no intervalo de hora em hora.

1 * * * * /meus_scripts/script.sh

Portanto o script acima será executado sempre no minuto 1 de hora em hora. Para fazer com que esse script seja executado a cada um minuto, o intervalo de minutos precisa ser configurado da seguintes formas:

0-59 * * * * /meus_scripts/script.sh

Ou

*/1 * * * * /meus_scripts/script.sh

Onde */1, indica o intervalo de 1 minuto.

OFF-TOPIC - Script para recuperar dados da Mega-Sena

Criei um site para enviar alertas dos resultados da Mega-Sena.

Mega-Sena Me Receba os resultados da Mega-Sena por e-mail. (1) Faça o seu jogo na lotérica mais próxima, (2) entre no site Mega-Sena Me, (3) digite as dezenas apostadas, PRONTO! Você receberá os resultados dos seus jogos por e-mail assim que Caixa disponibilizar os resultados no site.

Mega-Sena Me o código para esse site está disponível no GitHub.

blog comments powered by Disqus