Cron no Linux: como agendar tarefas

O Cron é uma ferramenta que tem a função de agendar tarefas. É nativo do sistema operacional Unix, principalmente das distribuições Linux. O Cron no Linux se baseia no tempo para executar as tarefas que nele forem configuradas.

As tarefas agendadas, também conhecidas como cron jobs, são executadas de forma automática. Elas fazem do cron uma ferramenta muito útil para automatizar trabalhos rotineiros. Estes ocupam muito tempo ou exigem um horário específico para sua execução.

Neste artigo, você terá uma visão ampla sobre o agendamento de tarefas e como usar a sintaxe do cron.

Além disso, inclui formas mais ágeis de agendar as tarefas, deixando a sua compreensão mais fácil.

Como instalar o Cron no Linux

Para os exemplos práticos deste artigo faremos uso do Ubuntu. Mas, você poderá utilizar outra distribuição de sua preferência, porém, alguns comandos do Linux poderão ser um pouco diferentes.

Contudo, você deverá utilizar um usuário com permissão de super usuário (comando sudo).

Essa é mais uma ferramenta que vem instalada por padrão em praticamente todas as distribuições Linux, como, por exemplo, nos servidores VPS Homehost. No entanto, se você usar alguma máquina em que o cron não estiver instalado, poderá usar o utilitário APT para isso.

Vamos iniciar a parte prática atualizando os índices de pacotes do Linux. Dessa forma, você pode começar executando o comando abaixo.

Em distribuições CentOS:

sudo yum update

Em distribuições Ubuntu:

$ sudo apt update
apt update pra instalar a cron no linux

Então, você deve aplicar o upgrade de pacotes que a atualização de índices trouxe:

sudo apt upgrade

Será o momento de você instalar o cron no Linux:

Em distribuições AlmaLinux, Rocky Linux e CentOS, o pacote se chama cronie e o serviço, crond:

sudo dnf install cronie
sudo systemctl enable --now crond

Em distribuições Ubuntu:

sudo apt install cron
apt install cron pra instalar a cron no linux

Mas, se já estiver instalado, a saída retornada será semelhante acima.

O cron é um serviço que roda em segundo plano no sistema operacional. Então, você terá que habilitá-lo para certificar que isso realmente aconteça:

sudo systemctl enable --now cron

O --now habilita o cron e já o inicia, sem precisar reiniciar o servidor. Após isso, o cron estará pronto para que você possa utilizá-lo.

Como funciona a estrutura do Cron no Linux

As tarefas cron são registradas e administradas através de um arquivo considerado como tabela, chamado de crontab.

Se a máquina possui mais de um perfil de usuário, cada usuário que logar no sistema pode ter suas próprias tarefas agendadas. Logo, cada usuário pode administrar seu crontab.

Os crontabs dos usuários ficam em /var/spool/cron/crontabs/ no Ubuntu e no Debian, e em /var/spool/cron/ no AlmaLinux e no CentOS. Mas não edite esses arquivos diretamente: para agendar uma tarefa, use sempre o comando crontab -e, que abre o seu crontab no editor e confere a sintaxe ao salvar.

Você precisa escrever os trabalhos em forma de expressões cron. A sintaxe das expressões cron possui duas partes:

A primeira indica o agendamento e a segunda concentra o comando que o daemon deve executar .

A parte de comando contém um comando seguido de um script ou url que normalmente executaríamos manualmente.

A parte de agendamento na sintaxe se divide em 5 campos diferentes, que são descritos na seguinte ordem:

Posição Campo Valores permitidos Exemplo
1 Minuto 0-59 30 — no minuto 30
2 Hora 0-23 21 — às 21h
3 Dia do mês 1-31 1 — no dia 1
4 Mês 1-12 ou JAN-DEC 7-12 — de julho a dezembro
5 Dia da semana 0-7 ou SUN-SAT — 0 e 7 são domingo 1-5 — de segunda a sexta

Os nomes de meses e dias são as abreviações em inglês: JAN, FEB… DEC e SUN, MON… SAT. Em qualquer campo, o * significa “todos”.

De forma agrupada, as duas partes das tarefas agendadas no crontab ficam estruturadas dessa forma:

[minuto] [hora] [dia do mês] [mês] [dia da semana] [comando para rodar na tarefa]

Gerador de cron: monte e entenda sua expressão

Escolha um atalho, ajuste os cinco campos ou cole uma expressão que você encontrou e não entendeu. A ferramenta explica em português o que ela faz, mostra as próximas cinco execuções e monta a linha completa do crontab — inclusive para substituir o WP-Cron do WordPress.

Gerador de cron

Escolha um atalho, edite os campos ou cole uma expressão pronta para entender o que ela faz.

As próximas execuções são mostradas no horário do seu navegador; o cron segue o fuso horário do servidor. Fonte: homehost.com.br

Exemplos de uso do Cron no Linux

Logo abaixo, um exemplo de sintaxe de tarefa cron funcional. A sintaxe em questão executa o comando curl na url https://www.homehost.com.br/ todo domingo às 21h30:

30 21 * * 0 curl https://www.homehost.com.br

Há caracteres que você pode utilizar na sintaxe de uma tarefa cron para facilitar o agendamento:

*: O asterisco tem a função de ser carácter coringa. Quando usado, representa “todos”.

Sendo assim, se você inserir * em todos os componentes de agendamento. Então, a tarefa se executará a todo minuto, todas as horas, todos os dias, todos os meses.

,: O uso de vírgula tem a função de formar uma lista quando desejamos executar a mesma tarefa em um intervalo fracionado.

Se você precisa executar uma tarefa no começo e no meio de cada hora, não precisa criar duas tarefas com agendamentos distintos. Por exemplo, 0 * * * * para a primeira e 30 * * * * para a segunda. Você obtém o mesmo resultado com apenas uma (ficando dessa forma 0,30 * * * *).

–: O hífen permite o uso de intervalos no agendamento. Caso você tenha um agendamento para que se execute a todos os 30 primeiros minutos de cada hora, basta usar 0-29 * * * * ….

/: Usada em conjunto com o asterisco, a barra serve para expressar um valor por etapa.

Por exemplo, você pode agendar uma tarefa que se execute a cada 3 horas, apenas usando 0 */3 * * *

Isso elimina a necessidade de escrever oito tarefas separadas para o mesmo comando.

Observação: qualquer número funciona depois da barra, mas os que não dividem o campo deixam o último intervalo mais curto. Com */7 nos minutos, a tarefa roda nos minutos 0, 7, 14… 56 e de novo no 0 — só 4 minutos depois. O gerador acima avisa quando isso acontece.

Outros exemplos de uso do Cron no Linux

20 * * * * – Execute o comando 20 minutos após cada hora.

0,15,30,45 * * * * – O comando será executado a cada 15 minutos.

*/15 * * * * – Parecido com o exemplo acima, o comando será executado a cada 15 minutos.

0 6 * * * – A tarefa será executada diariamente às 6h.

0 2 * * 2-4 – A execução da tarefa ocorre todas as terças, quartas e quintas-feiras às 2h.

20,40 */8 * 7-12 * – O comando será executado no minuto 20 e no minuto 40 a cada 8 horas. Diariamente nos últimos 6 meses do ano.

Administrando Crontabs no Linux

O Crontab é um arquivo especial em que se concentram os agendamentos dos cronjobs que serão executados.

Se você precisar editar alguma tarefa, deverá usar o comando crontab para isso.

Com este comando você edita as tarefas cron apenas em seu perfil de usuário crontab. Além disso, o comando crontab é capaz de reportar se houver erro em sintaxe.

Para editar o arquivo crontab, execute o seguinte comando:

$ crontab -e

Quando você executa o comando crontab -e pela primeira vez, uma solicitação para selecionar um editor de texto surge.

Saída:

crontab -e pra editar a cron no linux

Tecle Enter para aceitar a opção 1 padrão ou digite o número que corresponde ao editor de sua preferência.

Após você selecionar o editor, ele abrirá um novo crontab com instruções referentes ao seu uso. O documento terá esse mesmo conteúdo:

editando o cron

Então, nas demais ocasiões em que você executar “crontab -e” , o editor escolhido abrirá o arquivo crontab.

Uma vez com o editor aberto, você pode inserir os agendamentos de tarefas desejados, um por linha, e salvar as alterações ao sair.

Observação: Nas distribuições Linux há outro crontab contido em /etc/. Este outro crontab é conhecido como system-wide crontab . Ele possui um campo adicional no qual o usuário cron é quem deve executar cada tarefa.

Caso você precise editar este outro crontab, execute o comando:

$ sudo vim /etc/crontab
crontab configuracao

Conforme você pode perceber, neste arquivo crontab há todas as instruções necessárias para seu uso. Algumas instruções são idênticas ao que já aprendemos até aqui.

Para você apenas exibir o conteúdo do crontab, porém, sem editá-lo, execute o comando:

$ crontab -l
crontab -l

Como não possuímos tarefas agendadas ainda, a mensagem acima aparece.

Removendo Tarefas Cron

Você pode deletar o crontab com o seguinte comando:

$ crontab -r

Após rodar o comando, valide a deleção:

crontab -r e crontab -l

Mas atenção, este comando irá deletar o conteúdo do crontab sem pedir confirmação a você. Somente o use se de fato tiver certeza da deleção.

Porém, você pode executar o comando para exclusão de uma forma mais segura. Basta acrescentar o parâmetro -i ao comando e ao executá-lo solicita-se a confirmação se de fato quer concluir a exclusão.

$ crontab -r -i

Saída:

deletar a cron no linux

Para remover o agendamento, você deve digitar y ou n para cancelar a exclusão.

Cron na hospedagem compartilhada: cPanel e DirectAdmin

Na hospedagem compartilhada, você não usa o crontab -e: as tarefas são criadas pelo painel de controle, com os mesmos cinco campos de horário.

  • No cPanel: em Avançado → Trabalhos Cron (Cron Jobs). Escolha um intervalo pronto ou preencha os campos e informe o comando.
  • No DirectAdmin: em Recursos Avançados → Tarefas Cron (Cron Jobs).

Use o gerador acima para montar e conferir o horário antes de salvar — ele também gera o comando para substituir o WP-Cron do WordPress, que explicamos no guia sobre como substituir a cron do WordPress pelo cron do cPanel.

Administrando a Saída do Cron no Linux

Como as tarefas cron rodam em segundo plano, nem sempre conseguimos confirmação se foram executadas com sucesso ou não.

Porém, há métodos que auxiliam a ter um controle sobre a execução das tarefas.

Utilize ferramentas adicionais que redirecionem a saída das tarefas cron para acompanhar quando for ou não executadas com sucesso.

Sugestão 1

Por exemplo, você pode configurar um serviço de e-mail no servidor. Assim pode utilizá-lo para enviar as saídas das tarefas cron para o endereço de email.

Uma alternativa será inserir seu endereço de e-mail, junto com um campo MAILTO na parte superior do arquivo crontab.

Na linha seguinte, após ao MAILTO, inclua uma diretiva SHELL que aponte para o shell que será executado (o bash neste caso).

Na terceira linha, a diretiva HOME define o diretório de trabalho em que as tarefas são executadas. Na quarta linha, insira a tarefa cron, ficando semelhante a esta configuração:

MAILTO="homehost@homehost.com.br"

SHELL=/bin/bash

HOME=/

* * * * * echo 'Tarefa sendo executada a cada minuto'

Essa tarefa em questão retornará “Tarefa sendo executada a cada minuto”. Então, este retorno é enviado por e-mail a todo minuto para o endereço de e-mail indicado na diretiva MAILTO.

Sugestão 2

Uma outra solução que você poderá implementar é redirecionar as saídas da tarefa cron para um arquivo ou local vazio.

Para tanto, inclua dois símbolos de maior “>>” no fim do comando, seguido pela localização do arquivo de sua preferência, ficando semelhante a:

* * * * * echo ‘Tarefa sendo executada a cada minuto’

>> /var/log/tarefas.log

É possível executar um script através do cron e mantê-lo em execução em segundo plano. Dessa forma, você pode configurar a tarefa para redirecionar a saída do script para um local vazio. Por exemplo, para /dev/null o que exclui todos os dados gravados nele.

Por exemplo, a tarefa cron a seguir executa um script PHP em segundo plano:

* * * * * /usr/bin/php /var/www/homehost/backup.php > /dev/null 2>&1

O número 2 representa o erro padrão encaminhado para a saída, representado pelo número 1.

Como a saída padrão já redireciona para /dev/null, isso basicamente permite que o script rode sem exibir dados.

A saída continuará sendo silenciosa neste cenário, mesmo que no crontab tenha a diretiva MAILTO.

Restringindo acesso

Você pode controlar quais usuários terão permissão para uso da ferramenta crontab.

Os arquivos cron.allow e cron.deny, são responsáveis por permitir ou negar essa permissão, respectivamente. E a localização deles costuma ser em /etc/.

A regra é simples:

  • Se o arquivo /etc/cron.allow existir, só os usuários listados nele podem usar o crontab — o cron.deny nem é lido.
  • Se só o /etc/cron.deny existir, todos podem usar, menos os listados nele.

Por exemplo, para permitir que apenas o usuário suporte use o crontab, basta criar o cron.allow com o nome dele — todos os outros ficam bloqueados:

echo suporte | sudo tee -a /etc/cron.allow

Use o sudo tee, e não sudo echo >>: no segundo caso, quem grava o arquivo é o seu usuário, e o comando falha com “Permission denied”.

Um usuário que tenha privilégio de sudo possui acesso para editar arquivo crontab de outro usuário, utilizando o comando em questão:

sudo crontab -u usuário -e

Porém, se este usuário com privilégio com sudo estiver listado em cron.deny mas não está listado em cron.allow, o seguinte erro após executar o comando retornará:

The user user cannot use this program (crontab)

Sintaxes Especiais

Os daemons do cron possuem atalhos de vários comandos que você pode inserir no arquivo crontab para facilitar os agendamentos.

Estes são atalhos referentes ao cronograma numérico já apresentado:

AtalhoAbreviatura para
@hourly0 * * * *
@daily0 0 * * *
@weekly0 0 * * 0
@monthly0 0 1 * *
@yearly0 0 1 1 *

Nota: Estes atalhos são reconhecidos pelas atuais versões dos daemons do cron. Portanto, ao utilizar versões antigas de distribuições Linux, faça testes para confirmar se os atalhos funcionam.

Além disso, existe a sintaxe @reboot, que executará qualquer comando que a seguir sempre que o servidor for iniciado:

@reboot echo "System start up"

O uso desses atalhos facilita na interpretação do cronograma das tarefas no arquivo crontab.

Por que meu cron não rodou?

Quando uma tarefa não executa, a causa quase sempre é uma destas:

  1. Caminho incompleto. O cron roda com um PATH mínimo, então comandos como php podem não ser encontrados. Use o caminho completo — descubra-o com which php. No cPanel, costuma ser /usr/local/bin/php.
  2. O caractere %. No crontab, o % vira quebra de linha. Escreva \% no lugar de cada % — por exemplo, date +\%F.
  3. O fuso horário do servidor. O cron segue o horário do servidor, que pode ser diferente do seu. Confira com o comando date.
  4. Script sem permissão de execução. Dê permissão com chmod +x script.sh ou chame o interpretador direto: /bin/bash script.sh.
  5. O serviço parado. Confira com systemctl status cron no Ubuntu ou systemctl status crond no AlmaLinux.

Para ver se a tarefa foi disparada, consulte o log: grep CRON /var/log/syslog no Ubuntu e no Debian, ou sudo tail /var/log/cron no AlmaLinux e no CentOS.

Perguntas frequentes

O que é cron no Linux?
É o serviço que executa tarefas automaticamente em horários definidos — um backup toda madrugada, uma limpeza a cada hora, um script a cada 5 minutos. Ele vem instalado em praticamente todas as distribuições Linux e funciona em segundo plano.

O que é crontab?
É a tabela onde ficam as tarefas agendadas — cada linha é uma tarefa, com cinco campos de horário seguidos do comando. O nome também é usado para o comando que edita essa tabela: crontab -e.

Como agendar uma tarefa a cada 5 minutos?
Use a expressão */5 * * * * seguida do comando. A barra indica o intervalo: */5 no campo de minutos significa “a cada 5 minutos”. O gerador deste artigo monta e confere qualquer intervalo.

Como agendar uma tarefa todo dia no mesmo horário?
Preencha o minuto e a hora e deixe o resto com asterisco. Para todo dia às 3h da manhã, a expressão é 0 3 * * *. Para só nos dias úteis, 0 3 * * 1-5.

Como ver as tarefas agendadas?
Rode crontab -l para listar as suas. Para ver as de outro usuário, sudo crontab -u usuario -l. As tarefas do sistema ficam no arquivo /etc/crontab e na pasta /etc/cron.d/.

Qual a diferença entre o crontab -e e o /etc/crontab?
O crontab -e edita as tarefas do seu usuário, e elas rodam com as suas permissões. O /etc/crontab é o crontab do sistema e tem um campo a mais, entre o horário e o comando, com o usuário que executa cada tarefa.

Como usar o cron na hospedagem compartilhada?
Pelo painel de controle: em Trabalhos Cron, no cPanel, ou em Tarefas Cron, no DirectAdmin. Os campos de horário são os mesmos cinco do crontab — você só informa a expressão e o comando.

Por que meu cron não executa?
As causas mais comuns são o caminho incompleto do comando — use /usr/local/bin/php, e não só php —, o caractere % sem escape, o fuso horário do servidor diferente do seu e o script sem permissão de execução. A seção Por que meu cron não rodou? detalha cada uma.

Onde fica o log do cron?
No Ubuntu e no Debian, os registros ficam no syslog — consulte com grep CRON /var/log/syslog. No AlmaLinux e no CentOS, ficam em /var/log/cron. O log mostra se a tarefa foi disparada; erros do próprio comando aparecem na saída dele.

O cron usa o horário de qual fuso?
O do servidor, que pode ser diferente do seu — muitos servidores usam UTC, três horas à frente do horário de Brasília. Confira com o comando date antes de definir o horário das tarefas.

Automatize suas tarefas com controle total

Nos servidores VPS da Homehost, você tem acesso root para usar o crontab, instalar o que precisar e agendar qualquer rotina — backups, scripts e integrações. Prefere a praticidade de um painel? Na hospedagem de sites, as tarefas cron são criadas pelo cPanel ou DirectAdmin, em poucos cliques. Tudo em servidores no Brasil, com suporte em português.

Conhecer os servidores VPS

Considerações finais

Enfim, o cron no Linux é uma ferramenta bastante poderosa e flexível. Ele ajuda muito na redução de várias tarefas cotidianas na administração do Linux.

Principalmente quando combinado com scripts em shell, você será capaz de automatizar tarefas que normalmente são maçantes, como as populares rotinas de backup.

Este artigo foi útil?

Obrigado pela resposta!
Picture of Marcio S

Marcio S

Ganhe 30% OFF

Indique seu nome e e-mail,e ganhe um cupom de desconto de 30% para sempre na Homehost!