Você está na página 1de 8

08/08/2019 Agendando tarefas com o Crontab

VITOR BRITTO
DESENVOLVEDOR WEB
TEMA:

INÍCIO SOBRE PROJETOS

    

AGENDANDO TAREFAS COM O CRONTAB


 Editar este post Publicado em: 04/03/2014 | Leia em: 4 minutos

Saudações!

Para os usuários UNIX, segue uma dica interessante para agendar tarefas com o comando crontab.
Este cara, permite que você realize o agendamento de tarefas em determinados períodos.

CENÁRIO
Digamos que você possua um script para realizar um procedimento em um determinado intervalo de
tempo. Seja para o backup de arquivos mais obsoletos em projetos que você realizou há algum tempo
e, por algum motivo, não optou pelo seu versionamento ou um simples backup de um banco de
dados.

No que se refere a backups, existem duas formas para transitar estes dados:

1. Entre ambientes locais.


www.vitorbritto.com.br/blog/agendando-tarefas-com-crontab/ 1/8
08/08/2019 Agendando tarefas com o Crontab

2. De um ambiente local para um remoto (e vice-versa).

Além disso, podemos utilizar os comandos scp , rsync ou cp para realizar a transferência destes
arquivos.

Lembre-se de armazenar os seus arquivos em um local seguro no momento do backup.

ENTENDENDO O CRONTAB
O formato para o crontab é o seguinte: Campo Função Valores

1 Minuto 0-59

2 Hora 0-23

3 Dia do mês 1-31

4 Mês 1-12

5 Dia da semana 0-6

6 Programa para execução comando ou script

O dia da semana começa a contar no domingo (0).

Con ra abaixo como podemos criar as nossas tarefas:

# Cada linha representa uma tarefa no crontab


00 6 * * 1 /caminho/para/script/status.sh
00 12 5 * * /caminho/para/script/temp.sh
30 23 * * * /caminho/para/script/backup.sh

Perceba que, estamos programando a execução de 3 scripts em Shell nas datas selecionadas e os
mesmos farão o seguinte:

status.sh : realizar o procedimento contido neste script toda segunda, às 6:00 da manhã.
temp.sh : realizar o procedimento contido neste script no dia 5 de cada mês, às 12:00.
backup.sh : realizar o procedimento contido neste script todos os dias, às 23:30 da noite.

Você ainda pode adicionar um 7 (sétimo) campo, onde o sexto campo será substituído pelo nome do
usuário no sistema e o sétimo campo adicionado com o programa a ser executado. Veja o exemplo a
seguir:

# Execute esta tarefa a cada três horas, no dia 1 (um) de cada mês com o usuário roo
t.
00 */3 1 * * root /caminho/para/script/security.sh

www.vitorbritto.com.br/blog/agendando-tarefas-com-crontab/ 2/8
08/08/2019 Agendando tarefas com o Crontab

Perceba que estamos utilizando um novo método para de nir o período desta tarefa, o */3 . Este
trecho faz com que a tarefa seja executa em intervalos de 3 horas. Você poderia ainda de nir os
horários que esta tarefa seria executada, utilizando uma , (vírgula) para cada horário. Por exemplo:
00 3,9,15,21 1 * * root /caminho/para/script/security.sh .

IMPORTANTE
Os scripts a serem executados no exemplo acima pelo crontab, precisam estar de nidos como
executáveis no seu Shell. Para isso, certi que-se de que o comando chmod +x
/caminho/para/script/seuscript.sh foi executado previamente. Do contrário, utilize o operador
&& para compactar uma instrução no momento da execução do script. Como faremos isso?

Veja o exemplo abaixo:

# Tarefas:
00 6 * * 1 /caminho/para/script && bash status.sh
00 12 5 * * /caminho/para/script && bash temp.sh
30 23 * * * /caminho/para/script && bash backup.sh

Notas:
Usar bash ou sh para executar o seu script, vai depender do seu Shell.
Não esqueça que para tornar um script executável, é preciso de nir um shebang.

[][15]GERENCIANDO SUAS TAREFAS


PROGRAMADAS
Utilize o seguintes comandos para gerir as suas tarefas no crontab:

crontab -e: editar o arquivo atual ou criar um, caso não exista
crontab -l: listar suas tarefas programadas
crontab -r: remover uma tarefa programada

Nota: algumas empresas de hospedagem, disponibilizam o serviço para Crontab. Entre em


contato com o atendimento da empresa para saber se este serviço está disponível para você.

INDO ALÉM
Existem algumas maneiras para facilitar ainda mais o uso do crontab.

PALAVRAS ESPECIAIS
O crontab fornece alguns atalhos para de nirmos nossas tarefas, veja abaixo: Atalho Signi cado
www.vitorbritto.com.br/blog/agendando-tarefas-com-crontab/ 3/8
08/08/2019 Agendando tarefas com o Crontab

@reboot Será executado na inicialização do sistema.

@yearly Será executado uma vez ao ano, "0 0 1 1 *".

@annually O mesmo que @yearly

@monthly Será executado a cada mês, "0 0 1 * *".

@weekly Será executado uma vez por semana, "0 0 * * 0".

@daily Será executado uma vez por dia, "0 0 * * *".

@midnight O mesmo que @daily

@hourly Será executado a cada hora, "0 * * * *".

Importante: sempre aponte para os arquivos utilizando caminhos absolutos, pois o crontab não lê
as variáveis de ambiente do Shell.

CARREGAR SUAS TAREFAS EM UM ÚNICO ARQUIVO


Você pode de nir todas as suas tarefas em um único arquivo e chamá-lo com o crontab . Veja o
exemplo abaixo:

# 1. Crie o arquivo jobs.txt com o conteúdo abaixo:

00 6 * * 1 [comando ou script para executar]


00 12 5 * * [comando ou script para executar]
30 23 * * * [comando ou script para executar]

# 2. Execute o comando: crontab jobs.txt

Nota:
O processo vai substituir qualquer tarefa anterior com o conteúdo que estiver neste arquivo, sem
qualquer aviso.
Fica a seu critério como nomear e categorizar as suas tarefas.

Até a próxima! =]

www.vitorbritto.com.br/blog/agendando-tarefas-com-crontab/ 4/8
08/08/2019 Agendando tarefas com o Crontab

VITOR BRITTO
Full Stack Web Developer, extremamente apaixonado pelo seu trabalho (e Unix). Descobriu o mundo
dos códigos há quase duas decádas e mantém a mesma paixão desde o primeiro dia dessa
descoberta. Trabalha como freelancer full time há quase 4 anos desenvolvendo projetos voltados
para a web. Também direciona boa parte do seu tempo para pesquisas, desenvolvimento de projetos
open-source e escrever os artigos aqui publicados.

RECEBA OS ARTIGOS NO SEU E-MAIL


Inscreva-se na minha newsletter para receber noti cações de novos artigos no
seu e-mail.

Digite o seu email

ASSINAR NEWSLETTER

22 Comentários Blog - Vitor Britto 


1 Entrar

 Recomendar 8 t Tweet f Compartilhar Ordenar por Mais recentes

Participe da discussão...

FAZER LOGIN COM


OU REGISTRE-SE NO DISQUS ?

Nome

Dalton Soares • 7 meses atrás


Obrigado!
www.vitorbritto.com.br/blog/agendando-tarefas-com-crontab/ 5/8
08/08/2019 Agendando tarefas com o Crontab
Obrigado!
△ ▽ • Responder • Compartilhar ›

Jefferson • 10 meses atrás


Fala galera como ficaria assim, um vez por hora, das 12h as 15h todos os dias, alguém tem
ideia?
△ ▽ • Responder • Compartilhar ›

William > Jefferson • 7 meses atrás


0 12,15 * * *
Veja se funciona.
△ ▽ • Responder • Compartilhar ›

Ana Navarro • um ano atrás


Vitor, boa tarde. Preciso executar uma rotina toda 2a.feira ou dia 16 do mês, ou seja: se não
for segunda-feira mas for dia 16, executa e o contrário também: se não for dia 16, mas for
segunda-feira executa também. Não consigo fazer dar certo, pois parece que o Cron não
aceita colocar as 2 condições: dia da semana e dia do mês. Tem solução ? Pode me
ajudar?
△ ▽ • Responder • Compartilhar ›

Tecmicro Tecmicro • um ano atrás


Vitor, boa tarde!

Gostaria que minha rotina fosse executada um domingo sim e outro não, tem idéia de como
posso fazer essa rotina? tentei colocar no crontab "0/2" porém o mesmo não permite essa
configuração.
△ ▽ • Responder • Compartilhar ›

Rafael Messina • um ano atrás


ola eu gostaria de criar varios arquivos com nomes diferentes por que no momento eu so
consigo sobrescrever os arquivos com o crontab. como eu posso fazer para criar arquivos
com nomes diferentes?
△ ▽ • Responder • Compartilhar ›

Adário Muatelembe • 2 anos atrás


Quero que a tarefa corra todos os dias 25 do mês.
será que essa configuração ajuda: ** * 25 **
△ ▽ • Responder • Compartilhar ›

Daniel BH • 2 anos atrás • edited


Andei pesquisando aqui e creio que ficará assim: 00 02 1-7 */2 7
A rotina irá rodar no primeiro domingo do mês, às 2h da manhã, a cada 2 meses.
△ ▽ • Responder • Compartilhar ›

Daniel BH > Daniel BH • 2 anos atrás


Vitor, está correto desta forma 00 02 1-7 */2 7 ?
△ ▽ • Responder • Compartilhar ›

www.vitorbritto.com.br/blog/agendando-tarefas-com-crontab/ 6/8
08/08/2019 Agendando tarefas com o Crontab

Mecenas Sampaio • 3 anos atrás


Olá

Estou tentando rodar uma tarefa na primeira segunda-feira de cada mês, imaginei o
seguinte agendamento: 55 8 1-7 * 1, porém ele não funciona. Poderia me ajudar, onde estou
errando?
△ ▽ • Responder • Compartilhar ›

Pablo Veiga > Mecenas Sampaio • 2 anos atrás


Não sei se seu problema foi resolvido. pelo que entendi você vai executar todas
segundas do mês as 08:55
(Min) (Hora) (Dia) (Mês) (Dia-Semana)
55 8 * * 1

Do jeito que está sue código vc está falando para ele ser executado as 8:55 do dia 1
ao 7 de todos meses e só na segunda-feira, portanto creio eu que irá executar
somente uma vez. tente a configuração acima que lhe passei
△ ▽ • Responder • Compartilhar ›

Andre Araujo • 3 anos atrás


Material Excelente não encontrei nem sique parecido, esta de parabéns (y)
△ ▽ • Responder • Compartilhar ›

Tiago Alexandre Galera • 3 anos atrás


Valeu brother!!!
△ ▽ • Responder • Compartilhar ›

alvaro lordelo • 3 anos atrás


Preciso executar o comando a cada 5 minutos no crontab "dhclient -b ue0" alguma idéia?
△ ▽ • Responder • Compartilhar ›

Péricles Andrade > alvaro lordelo • 3 anos atrás


Comece com: */5
△ ▽ • Responder • Compartilhar ›

Comercial Simples Solutions • 4 anos atrás


Pessoal, preciso modificar um rotina de backup que ta acumulando muitos arquivos na
maquina, precisava apagar arquivos de backup mais antigos que 10 dias. Como ficaria isso?
nao entendo quase nada. Me ajudem. Grato.
△ ▽ • Responder • Compartilhar ›

Neilton Vieira > Comercial Simples Solutions • 4 anos atrás


Boa noite, voce pode usar o find pra encontrar os arquivos mais antigos que 10 dias
e executar a exclusão no retorno do find.

Ex.: find /diretorio/dos/backups -name "sintaxes-do.arquivo" -ctime +10 -exec rm -f {}


";"

Neste caso o comando vai procurar no diretorio arquivos que existam a mais de 10
dias e executar o rm f
www.vitorbritto.com.br/blog/agendando-tarefas-com-crontab/ 7/8
08/08/2019 Agendando tarefas com o Crontab
dias e executar o rm -f.

Abraços e boa sorte.


△ ▽ • Responder • Compartilhar ›

Lucas Simões • 5 anos atrás


Obrigado Vitor! Conseguir ter uma visão melhor sobre o crontab (y) Parabéns :D
1△ ▽ • Responder • Compartilhar ›

Dan Jesus • 5 anos atrás


Show Vitor, excelente post, já uso crontab faz um bom tempo e sempre é uma mão na roda,
o bacana é reforçar que é possível executar qualquer tipo de script sejam ruby, python, php
node e etc. Além de poder redirecionar o retorno do script para um arquivo de log ou para
outro comando.
1△ ▽ • Responder • Compartilhar ›

Luis Arlindo • 5 anos atrás


Vitor o crontab so ira realizar tarefas de scripts .sh ? scripts escrito em ruby ou python
poderiam ser executados da mesma forma ?
1△ ▽ • Responder • Compartilhar ›

Vitor Britto Mod > Luis Arlindo • 5 anos atrás • edited

Desenvolvido por Vitor Britto. Feito com Jekyll,  e  .

www.vitorbritto.com.br/blog/agendando-tarefas-com-crontab/ 8/8

Você também pode gostar