Observação:
- Este tutorial está disponível em um ambiente de laboratório gratuito fornecido pela Oracle.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir o laboratório, substitua esses valores pelos específicos do seu ambiente de nuvem.
Usar o Utilitário Crontab para Programar Tarefas no Oracle Linux
Antes de Começar
Este tutorial mostra como usar o comando crontab no Oracle Linux.
Histórico
O Oracle Linux pode executar programas automaticamente como tarefas ou jobs programados. Você pode programar programas para serem executados como tarefas no nível do sistema editando a configuração cron em /etc/cron*
; ou pode programar programas para serem executados como jobs dentro do crontab do usuário. Se você não tiver acesso de administrador do sistema em um sistema ou os programas que deseja programar forem específicos para sua conta de usuário, o utilitário crontab fornecerá um bom mecanismo para executar programas em uma programação regular sob suas próprias credenciais de usuário. O crontab permite programar jobs para serem executados com a frequência de cada minuto ou com a frequência de uma vez por ano; no entanto, você deve observar que o job cron não será executado se o sistema estiver inativo durante o tempo em que o job foi programado para ser executado.
Observe que a configuração cron é padrão na maioria dos sistemas Linux e está disponível para sistemas semelhantes ao Unix desde 1975. Soluções de agendamento mais complexas estão incluídas na Systemd na forma de timers e os usuários são incentivados a explorar timers Systemd em mais profundidade para resolver requisitos específicos. No entanto, este tutorial fornece treinamento básico que é mais adequado para o usuário médio.
Do Que Você Precisa?
- Um sistema com o Oracle Linux instalado
Objetivos
Neste tutorial, você aprenderá a:
- Listar o conteúdo de um crontab existente
- Criar e editar entradas crontab
- Acessar saída crontab
- Remover o crontab completo de um usuário
Listar o conteúdo do seu arquivo crontab
Observação: ao usar o ambiente de laboratório gratuito, consulte Conceitos Básicos do Oracle Linux Lab para obter conexão e outras instruções de uso.
Use o comando crontab -l
para listar o conteúdo do seu arquivo crontab.
crontab -l
Se não existir nenhuma entrada crontab para o usuário, a seguinte mensagem será exibida:
no crontab for oracle
Crie ou edite seu crontab
-
Use o comando
crontab –e
para abrir seu crontab no editor padrão:crontab -e
O editor padrão do Oracle Linux é o editor vim.
-
Adicione a seguinte linha ao final do arquivo para criar um job crontab que execute o comando echo a cada minuto:
* * * * * echo "Hello World"
Em vim:
- Você pode pular para a parte inferior do arquivo pressionando 'Shift-g'.
- Pressione a tecla 'i' para entrar no modo de inserção.
- Insira a linha do crontab.
- Clique na tecla 'Esc' para sair do modo de inserção.
- Insira ':wq' para escrever o arquivo e para o editor.
Esta etapa instala o crontab e o ativa imediatamente:
crontab: installing new crontab
-
Liste as entradas no seu crontab para exibir a nova entrada:
crontab -l
Cada trabalho aparece em sua própria linha no crontab. O crontab tem 5 campos separados por espaço que definem os diferentes períodos que podem ser configurados, seguidos pelo comando executado para o job. O comando pode ser equivalente a qualquer comando que você possa executar na linha de comando do sistema, permitindo que você execute seus próprios scripts ou aproveite os pipes e operadores de redirecionamento.
Verificar a saída de entrada cron
O MTA (No Mail Transport Agent) é instalado em um sistema Oracle Linux mínimo ou em uma imagem de plataforma Oracle Linux, por padrão. Quando nenhum MTA é encontrado, o daemon cron direciona a saída dos comandos especificados no crontab para o daemon Syslog. Em uma nova instalação do Oracle Linux, você pode exibir a saída do crontab no arquivo de log em /var/log/cron
.
Execute o seguinte comando para exibir a saída gerada pela sua nova entrada crontab:
sudo tail /var/log/cron
Observe que a tarefa cron só é executada a cada minuto; portanto, talvez você precise aguardar um minuto antes de executar o comando. A saída desta entrada cron deve ser semelhante a:
Jun 30 12:39:02 ol-server CROND[68564]: (oracle) CMD (echo "Hello World")
Jun 30 12:39:02 ol-server CROND[68551]: (oracle) CMDOUT (Hello World)
Essa saída mostra ao usuário que o comando é executado como, o comando que foi executado e, em seguida, mostra a saída do comando.
Se um MTA, como postfix ou sendmail estiver instalado, o cron direcionará a saída da entrada crontab para o spool de e-mail do usuário em que a entrada crontab é executada. Isso será discutido mais adiante neste tutorial.
Opções de sequência de tempo Crontab
Os campos de tempo Crontab são definidos na seguinte sequência:
- minuto: De 0 a 59
- hora: De 0 a 23
- dia: De 1 a 31
- mês: De 1 a 12, ou o nome do mês
- dia da semana: de 0 a 7, ou o nome abreviado do dia. Observe que 0 e 7 representam domingo.
Caracteres especiais podem ser usados em qualquer um dos campos de tempo:
- Asterisco (*): Especifica que o comando deve ser executado para cada instância do campo
- Hífen (-): pode ser usado para indicar um intervalo. Por exemplo, no campo dia da semana, você pode especificar 1 a 5 para programar a tarefa para ser executada de segunda a sexta-feira, mas não para ser executada no sábado ou domingo.
- Vírgula (,): pode ser usada para especificar uma lista de valores para um campo. Por exemplo, no campo de hora, você pode especificar 6,18 para programar a tarefa para ser executada às 6h e 6h.
- Barra (/): Pode ser usada para especificar valores de etapa. Por exemplo, você pode especificar */15 no campo minutos para programar uma tarefa para ser executada a cada 15 minutos.
O crontab também permite que você use uma extensão de abreviatura especial para substituir os campos de tempo para requisitos gerais de tempo. É importante ressaltar que esta abreviatura também inclui uma opção para executar um comando após a reinicialização:
- @reboot : Executar uma vez após a reinicialização.
- @yearly : Executar uma vez por ano, ou seja, "0 0 1 1 *".
- @annually : Executar uma vez por ano, ou seja, "0 0 1 1 *".
- @monthly : Executar uma vez por mês, ou seja, "0 0 1 * *".
- @weekly : Executar uma vez por semana, ou seja, "0 0 * * 0".
- @daily : Executar uma vez por dia, ou seja, "0 0 * * *".
- @hourly : Executar uma vez por hora, ou seja, "0 * * * *".
Observe que o crontab só fornece granularidade de 1 minuto. Não é simples definir uma entrada crontab que seja executada com mais frequência do que a cada minuto. Se você está procurando uma ferramenta que possa lidar com isso, considere procurar unidades temporizadoras Systemd.
Edite o crontab para testar comandos de execução diferentes em sequências de tempo diferentes
-
Use o comando
crontab –e
para abrir seu crontab no editor padrão:crontab -e
-
Adicione as seguintes entradas ao crontab:
*/15 * * * * echo "This crontab entry runs every 15 minutes" 10 * * * * echo "This crontab entry runs at 10 minutes past every hour" 30 13 * * 3 echo "This crontab entry runs at 13h30 on every Wednesday" @reboot echo "This command runs once after a reboot event"
-
Salve o arquivo crontab e saia.
Sintaxe de comando Crontab
O comando crontab é executado sob as credenciais do usuário ao qual o crontab pertence e é executado com algumas variáveis de ambiente padrão definidas, incluindo:
- HOME: O diretório home do usuário como o crontab é executado
- LOGNAME: Equivalente ao nome de usuário do qual o crontab é executado como
- USUÁRIO: O nome de usuário que o crontab executa como
- SHELL: O binário shell que é usado para executar comandos. Isso é definido como
/bin/sh
por padrão. - CAMINHO: O caminho disponível para o utilitário crontab. Isso é definido como
/usr/bin:/bin
por padrão.
Você pode definir variáveis de ambiente alternativas especificando-as como linhas dentro do crontab que não incluem campos de tempo, por exemplo, se preferir usar o shell bash e quiser importar regularmente todas as variáveis e configurações com sua configuração .bashrc
pessoal, você pode editar seu crontab para ter a seguinte aparência:
SHELL=/bin/bash
* * * * * source $HOME/.bashrc;
Como a execução do comando para um job crontab é executada em um ambiente de shell, a sintaxe de shell padrão se aplica e pode ser usada para fazer pipe ou redirecionar a saída. Por exemplo, para redirecionar toda saída para /dev/null, desativando qualquer saída enviada para o job como resultado, use redirecionamentos de shell padrão para a saída STDOUT e STDERR no comando:
* * * * * /path/to/command > /dev/null 2>&1
Como alternativa, você pode redirecionar a saída para anexar a um arquivo que poderia ser usado para rastrear a saída do comando a cada execução:
* * * * * /path/to/command >> $HOME/command.log
Edite seu crontab para testar a sintaxe de comandos
-
Abra o crontab em um editor usando o comando
crontab -e
. -
Adicione as seguintes entradas:
*/15 * * * * echo "This 'silent' crontab entry runs every 15 minutes but output is redirected to /dev/null" > /dev/null 2>&1 * * * * * echo "The date and time is $(date +\%Y-\%m-\%d\ \%H:\%M:\%S)" >> $HOME/crontab.log
Observe que os caracteres % no comando de data escapam porque os caracteres % são alterados para caracteres de nova linha pelo utilitário crontab e todos os dados após o primeiro % são enviados para o comando como entrada padrão. Consulte
man 5 crontab
para obter mais informações. -
Salve o arquivo e saia.
Em um minuto, um arquivo crontab.log deve aparecer no diretório $HOME. Você pode exibir o conteúdo deste arquivo executando:
tail $HOME/crontab.log
Acessar a saída do crontab no spool de e-mail local
Se um MTA estiver instalado, toda a saída do crontab será enviada por e-mail para o sistema do usuário spool, por padrão.
Observação: As instruções a seguir são apenas para fins de exemplo e não descrevem uma configuração completa para um MTA (mail transfer agent). Os padrões de configuração podem não ser apropriados para a instalação. Se você estiver ativando o postfix em um sistema, leia também Oracle Linux: Install the Postfix Email Server para obter informações sobre como configurá-lo corretamente.
Para que o tratamento de e-mails do crontab funcione corretamente, você deve instalar, configurar e ativar um MTA corretamente. Para fins deste exercício, você pode simplesmente executar as seguintes etapas para permitir que o MTA postfix trate mensagens locais:
-
Instale o pacote postfix:
sudo dnf install -y postfix
-
Ative e inicie o serviço de correções. A configuração padrão ativa o postfix como um MTA de entrega local somente:
sudo systemctl enable --now postfix.service
-
Reinicie o serviço de crond para que ele comece a usar o postfix MTA para tratar a entrega de e-mail:
sudo systemctl restart crond.service
Se você não tiver configurado seu crontab para redirecionar a saída para um endereço de e-mail alternativo ou para descartar a saída de suas tarefas cron, a saída de cada job será automaticamente entregue no spool de e-mail local do usuário. A spool de e-mail geralmente é armazenada como um único arquivo de e-mail que pode ser acessado em /var/spool/mail/$USER. Se você estiver simplesmente monitorando a atividade recente, é mais fácil adaptar este arquivo para ver o e-mail da forma como ele é entregue:
tail -f /var/spool/mail/$USER
Para revisar a saída de cada job cron em uma interface gerenciável, instale o pacote mailx e use o comando mail
para exibir o conteúdo do spool de e-mail:
sudo dnf install -y mailx
mail
O e-mail é listado da seguinte forma:
Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/oracle": 1 messages 1 new
>N 1 (Cron Daemon) Wed Aug 5 23:48 30/1436 "Cron oracle
&
Insira o número da mensagem de e-mail a ser exibida. Por exemplo, digite 1 para exibir a primeira mensagem na fila:
& 1
Hello World
Use o comando header
para retornar à listagem de cabeçalhos de e-mail ou use o comando quit
para sair do aplicativo.
Você pode alterar o endereço de e-mail que é usado para enviar a saída cron definindo a variável de ambiente MAILTO em seu crontab, mas seu sistema deve ser configurado para tratar a entrega de e-mail externa. Se você definir o ambiente MAILTO como um valor vazio, a saída será descartada e nenhum e-mail será enviado para qualquer trabalho cron no crontab.
Remova todo o crontab
Use o comando crontab -r
para remover todo o crontab de um usuário.
crontab -r
Este comando remove todas as entradas de job cron especificadas para seu usuário. Se você quiser remover apenas uma entrada de job específica, use crontab -e
para editar o crontab e remover a linha do job que deseja remover.
Verifique man 5 crontab
e man systemd.timer
para obter mais detalhes sobre esses recursos.
Demonstração em Vídeo
Uma demonstração de vídeo será fornecida no Oracle Linux Automating Tasks Cron Utility se você precisar de mais informações sobre como trabalhar com o utilitário crontab no Oracle Linux.
Mais Informações
- Oracle Linux: Instalar o Servidor de E-mail do Postfix
- Documentação do Oracle Linux
- Oracle Learning Library
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Use the Crontab Utility to Schedule Tasks on Oracle Linux
F49756-04
July 2022
Copyright © 2021, Oracle and/or its affiliates.