O Guia do Iniciante para Usar Cron no Linux

Cron é uma simples ferramenta UNIX que gerencia e programa a execução de comandos no seu computador. Foi desenvolvido pela primeira vez em 1987 por Paul Vixie e desde então se tornou uma ferramenta inestimável em sistemas operacionais baseados em Linux, tanto para administradores quanto para usuários.
Hoje em dia, existem várias implementações e reescritas do cron que você pode instalar facilmente em seu sistema Linux. Apesar das diferenças, todos esses programas compartilham a mesma linhagem do Vixie Cron.
Assim, este artigo tem como objetivo fornecer uma visão básica de como o cron original do Vixie funciona, sua sintaxe e como você pode usá-lo para agendar tarefas em seu sistema Linux.
Índice
- Como o Cron Funciona?
- Crontab: O Coração do Cron
- Crontabs do Sistema
- Revisando a atividade do cron
- Perguntas Frequentes
Leia também: Como Criar Facilmente Tarefas Cron no Linux com o Zeit
Como o Cron Funciona?
Cron é uma ferramenta UNIX incrivelmente simples. Ele funciona em duas partes. Primeiro, o cron é executado como um processo em segundo plano que inicia quando você liga o seu sistema.
A partir daí, ele lê um arquivo específico a cada minuto. Este arquivo contém uma lista de comandos que, por sua vez, consiste em um código de tempo e um caminho de arquivo para cada script ou programa que você deseja executar.

Essa abordagem permite que o cron seja altamente flexível em sistemas grandes. Por exemplo, implementações modernas do cron, como o Cronie, executam apenas uma única instância do cron, mesmo se essa máquina hospedar vários usuários.

O Cronie torna isso possível fornecendo crontabs locais para cada usuário instalado no sistema. Assim, o cron só precisa saber quem é o dono do crontab, o nível de permissão desse usuário e os comandos dentro do crontab.
Isso não apenas torna o sistema mais eficiente, mas também mais seguro, reduzindo a quantidade de programas privilegiados rodando na memória.
Crontab: O Coração do Cron
Toda implementação do cron utiliza alguma forma de crontab. Este é um simples arquivo de texto que contém todos os comandos que o cron executará para aquele determinado usuário. Como descrito acima, cada usuário no sistema possui seu próprio crontab. Eles podem visualizar rodando o seguinte comando:
crontab -l
Isso irá imprimir o conteúdo do crontab do usuário atual na saída padrão. Isso pode ser incrivelmente útil se você apenas quiser ver rapidamente quais comandos o cron está executando para esse usuário.
Para editá-lo, você precisará rodar o comando:
crontab -eIsso dirá ao cron para abrir o seu editor de texto padrão e carregar o arquivo crontab dentro dele. Fazer isso permitirá que você edite o arquivo crontab.

Leia também: Como Usar Temporizadores Systemd como uma Substituição do Cron
A Sintaxe do Crontab
A sintaxe do arquivo crontab é incrivelmente simples. Uma única linha neste arquivo indicará um comando correspondente que precisa ser executado para aquele determinado usuário. A forma geral de um comando crontab se parece com isto:
m h d mon dow [flags]commandO intervalo de tempo é um campo de cinco dígitos onde você pode dizer ao cron com que frequência deseja executar um comando. Este é o recurso central de qualquer implementação do cron e permite que você seja tanto específico quanto flexível em como o cron lida com tarefas recorrentes.
- m = minuto entre 0 e 59
- h = hora entre 0 e 23
- d = dia do mês entre 1 e 31
- mon = mês entre 1 e 12
- dow = dia da semana entre 0 e 6. Zero é domingo.
O campo flags é um conjunto de opções que modificam como o cron se comporta para um único comando. Por exemplo, você pode incluir a opção -n para impedir que o cron envie e-mails do sistema.
O campo command é o comando que o cron executará em intervalos definidos. Isso pode ser tanto um script shell que você escreveu quanto um caminho de programa com flags.

Sabendo disso, você pode usar todos esses elementos juntos em uma única linha de crontab para criar intervalos de tempo específicos para suas tarefas. Por exemplo, eu posso executar um script no meu sistema Ubuntu todo dia 24 de julho às 2:30 da manhã, escrevendo a seguinte linha no crontab:
302247*/home/$USER/myscript.sh
Nota: É recomendável executar uma tarefa cron em números “incomuns” de minutos (11, 27, 34, etc) para evitar que diferentes tarefas cron se sobreponham.
Códigos Curtos
O Crontab permite que você use alguns códigos curtos para facilitar a leitura das suas entradas cron.
@reboot– Executar uma vez, na inicialização@yearly– Executar uma vez por ano, “0 0 1 1 *”@annually– o mesmo que @yearly@monthly– Executar uma vez por mês, “0 0 1 ”@weekly– Executar uma vez por semana, “0 0 0”@daily– Executar uma vez por dia, “0 0 *”@midnight– o mesmo que @daily@hourly– Executar uma vez por hora, “0 ”
Por exemplo:
@daily ramces /home/ramces/.scripts/file-backup.shO código curto @reboot permite que você crie scripts para serem executados na inicialização:
@reboot /home/ramces/.scripts/bootup.shIsso pode ser incrivelmente útil se você quiser criar uma maneira de garantir que os comandos sejam executados assim que você ligar a máquina.
Nota: Dependendo da configuração do seu sistema, o código curto @reboot pode ou não funcionar como pretendido em seu sistema.
Crontabs do Sistema
Outro recurso brilhante do cron é que ele pode gerenciar tarefas recorrentes em todo o sistema, pois você também pode criar arquivos de crontab para o root. Isso pode ser incrivelmente útil se você quiser automatizar a manutenção e atualizações do sistema.
Para criar um crontab root, você só precisa usar sudo com o comando, ou logar na sua conta root:
sudo crontab -e
O crontab do sistema segue em grande parte o mesmo formato que o crontab do usuário. No entanto, uma diferença chave entre os dois é que o crontab root permite que você execute comandos como qualquer usuário no sistema:
m h d mon dow user [flags]"command"Sabendo disso, você pode então usar isso para criar comandos recorrentes tanto em nível de usuário quanto de root dentro do mesmo crontab:
302 sun root /bin/apt update
305* ramces /home/ramces/.scripts/file-backup.shFazendo isso, posso preservar as permissões dos meus arquivos enquanto tenho um único local onde posso editar os comandos que quero executar.

Leia também: Por que e como editar seu arquivo Sudoers no Linux
Editando entradas cron como outro usuário
Se em vez de editar o crontab como um usuário root, você quiser agendar uma tarefa cron como outro usuário, isso também é possível com a flag -u.
sudo crontab -u nome_de_usuario -ePor exemplo, para executar uma tarefa cron como o usuário “www-data”, use o seguinte comando:
sudo crontab -u www-data -eLeia também: Como Salvar a Saída do Terminal em um Arquivo no Linux
Revisando a atividade do cron
Embora agora você esteja preparado para executar comandos ou scripts específicos, você pode querer garantir que eles foram executados. Embutido no cron está que, uma vez que um comando é executado, ele enviará um e-mail ao dono do cron. Isso pode ser alterado com a variável “MAILTO”.

Adicionar [email protected] enviará todos os relatórios de trabalhos cron para um e-mail especificado. Esta variável pode geralmente ser encontrada na parte superior da tela de edição do crontab. No entanto, se não estiver lá, você pode adicionar a variável e ela funcionará como esperado.
Vários endereços de e-mail podem ser separados por uma vírgula. Se você precisar que um comando diferente seja enviado por e-mail para outro lugar, pode adicionar o comando MAILTO diretamente acima do comando. Comandos após aquele mailto serão enviados para o novo endereço. Se você deixar MAILTO= em branco, as notificações serão enviadas ao dono da entrada cron.
Se você não quiser receber e-mails, também pode verificar os logs do cron. Na maioria dos sistemas, acessar os logs do cron exigirá permissões de superusuário. O log do cron pode ser encontrado em “/var/log.” O arquivo cron ou syslog exibirá o log das entradas cron executadas.
sudogrep crontab syslogPerguntas Frequentes
Por que meu comando cron está executando a cada minuto em vez de uma vez por hora?
Este é um dos erros mais comuns ao gerenciar crontabs. Por padrão, adicionar um valor de asterisco em um código de tempo significa que ele será executado para cada instância possível daquele valor. Por exemplo, um valor de 0 12 * * * dirá ao cron que você deseja executar um comando uma vez por dia ao meio-dia.
No entanto, a maioria dos iniciantes frequentemente escreve o mesmo código de tempo como * 12 * * *. Escrever dessa forma significará que o comando será executado uma vez por minuto, das 12:00 PM às 12:59 PM. Assim, é uma boa prática escrever 0 no campo de minuto para garantir que o comando seja executado apenas uma vez.
Existem outras opções que posso usar com o cron?
Além das variáveis -n e MAILTO, você também pode usar o comando -s para dizer ao programa para ser rigoroso ao executar comandos. Usar essa opção obrigará o cron a se concentrar apenas no comando atual até que ele termine. Isso pode ser incrivelmente útil se sua máquina usa um conjunto de comandos que precisam ser executados em uma ordem específica.
Você também pode usar a variável SHELL para fazer o cron usar um shell diferente para seus comandos. Por exemplo: SHELL=/bin/ksh
Créditos da imagem: Unsplash