Observação:

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. Este tutorial é direcionado aos usuários do Oracle Linux 8, mas os comandos também estão disponíveis em outras versões do Oracle Linux.

Histórico

O Oracle Linux pode executar programas automaticamente conforme 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 de sistema em um sistema ou se os programas que deseja programar forem específicos da sua conta de usuário, o utilitário crontab fornece um bom mecanismo para executar programas em uma programação regular sob suas próprias credenciais de usuário. O crontab permite que você programe jobs para serem executados com frequência a cada minuto ou tão raramente como uma vez por ano; no entanto, você deve observar que o job cron não será executado se o sistema estiver inativo durante o horário em que o job foi programado para ser executado.

Este tutorial é direcionado aos usuários do Oracle Linux 8, mas o crontab também está disponível para o Oracle Linux 7, e o conteúdo deste tutorial deve se aplicar igualmente a essa plataforma. 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 em Systemd na forma de temporizadores e os usuários são incentivados a explorar timers Systemd em mais profundidade para resolver requisitos específicos. No entanto, este tutorial fornece um treinamento básico mais adequado para o usuário médio.

Do Que Você Precisa?

Objetivos

Neste tutorial, você aprenderá a:

Listar o conteúdo do seu arquivo crontab

Observação: Ao usar o ambiente de laboratório gratuito, consulte Informações Básicas sobre o Oracle Linux Lab para obter instruções de 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

Criar ou editar sua crontab

  1. Use o comando crontab –e para abrir seu crontab no editor padrão:

    crontab -e
    

    O editor padrão no Oracle Linux 8 é o editor vim.

  2. 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.
    • Informe a linha crontab.
    • Pressione a tecla 'Esc' para sair do modo de inserção.
    • Insira ':wq' para gravar o arquivo e para bastante o editor.

    Esta etapa instala o crontab e o torna ativo imediatamente:

    crontab: installing new crontab
    
  3. Liste as entradas no 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 de tempo 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 os operadores de redirecionamento.

Verifique sua saída de entrada cron

Por padrão, nenhum Agente de Transporte de E-mail (MTA) é instalado em um sistema Oracle Linux mínimo ou em uma imagem de plataforma Oracle Linux. 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 8, você pode exibir a saída crontab no arquivo de log em /var/log/cron.

Execute o seguinte comando para exibir a saída gerada por sua nova entrada crontab:

sudo tail /var/log/cron

Observe que a tarefa cron só é executada a cada minuto; portanto, talvez seja necessário aguardar um minuto antes de executar o comando. A saída dessa entrada cron deve ser semelhante a:

Jun 30 12:39:02 ol8-server CROND[68564]: (oracle) CMD (echo "Hello World")
Jun 30 12:39:02 ol8-server CROND[68551]: (oracle) CMDOUT (Hello World)

Essa saída mostra ao usuário que o comando foi executado, 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 como a entrada crontab é executada. Isso será discutido mais adiante neste tutorial.

Opções de sequência de horário da guia cron

Os campos de hora de referência cruzada são definidos na seguinte sequência:

Caracteres especiais podem ser usados em qualquer um dos campos de horário:

O crontab também permite que você use uma extensão de estenografia especial para substituir os campos de tempo para requisitos gerais de tempo. Importante também, essa abreviatura também inclui uma opção para executar um comando após a reinicialização:

Observe que o crontab fornece apenas 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ê estiver procurando uma ferramenta que possa lidar com isso, considere procurar unidades do temporizador Systemd.

Edite o crontab para tentar diferentes comandos em execução em diferentes sequências de tempo

  1. Use o comando crontab –e para abrir seu crontab no editor padrão:

    crontab -e
    
  2. 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"
    
  3. Salvar o arquivo crontab e sair.

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:

É possível definir variáveis de ambiente alternativas especificando-as como linhas dentro do crontab que não incluem campos de tempo, por exemplo, se você preferir usar o shell bash e quiser importar regularmente todas as variáveis e configurações com sua configuração pessoal .bashrc, você pode editar seu crontab para ter a seguinte aparência:

SHELL=/bin/bash
* * * * * source $HOME/.bashrc;

Como o comando executado para uma tarefa crontab é executado em um ambiente de shell, a sintaxe de shell padrão é aplicada e pode ser usada para pipe ou redirecionar a saída. Por exemplo, para redirecionar toda a saída para /dev/null, desativando qualquer saída enviada por e-mail 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 acrescentar a um arquivo que poderia ser usado para rastrear a saída do comando sempre que for executado:

* * * * * /path/to/command >> $HOME/command.log

Edite seu crontab para testar a sintaxe de comando

  1. Abra o crontab em um editor usando o comando crontab -e.

  2. 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 têm escape porque % caracteres são alterados em caracteres de nova linha pelo utilitário crontab e todos os dados após o primeiro % são enviados ao comando como entrada padrão. Consulte man 5 crontab para obter mais informações.

  3. Salve o arquivo e saia.

Em um minuto, um arquivo crontab.log deve aparecer no diretório $HOME. É possível exibir o conteúdo desse arquivo executando:

tail $HOME/crontab.log

Acessar saída crontab no spool de e-mail local

Se um MTA estiver instalado, toda a saída crontab será enviada para o spool de e-mail do sistema do usuário, 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 agente de transferência de e-mail (MTA). 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 crontab funcione corretamente, instale, configure e ative um MTA corretamente. Para este exercício, você pode simplesmente executar as seguintes etapas para permitir que o MTA postfix trate do correio local:

  1. Instale o pacote postfix:

    sudo dnf install -y postfix
    
  2. Ative e inicie o serviço de pós-fixação. A configuração padrão ativa o postfix como um MTA de entrega local somente:

    sudo systemctl enable --now postfix.service
    
  3. Reinicie o serviço de crond, para que ele comece a usar o MTA pós-fix 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 descartar a saída de seus jobs cron, a saída de cada job será automaticamente entregue no spool de e-mail local do usuário. O spool de e-mail geralmente é armazenado 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 esse arquivo para ver o e-mail 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 maneira:

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
&

Informe 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.

É possível alterar o endereço de e-mail usado para enviar a saída cron por e-mail 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 tarefa cron no crontab.

Remover o crontab inteiro

Use o comando crontab -r para remover o crontab inteiro para um usuário.

crontab -r

Este comando remove todas as entradas de job cron que você especificou 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 você deseja remover.

Demonstração em Vídeo

Uma demonstração de vídeo é fornecida em https://www.youtube.com/watch?v=BpPGoRYTv9I se você precisar de mais informações sobre como trabalhar com o utilitário crontab no Oracle Linux 8.

Utilitário Cron de Tarefas de Automação do Oracle Linux 8

Mais Informações

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.