Agendamento de Tarefas com at e cron no Linux

CompTIABeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá os fundamentos do agendamento de tarefas em um ambiente Linux. Você explorará dois utilitários essenciais de linha de comando: o at, para agendar tarefas únicas que devem ser executadas em um momento específico no futuro, e o cron, para automatizar tarefas recorrentes que precisam ser executadas em intervalos regulares, como diariamente, semanalmente ou mensalmente.

Você começará preparando seu ambiente de laboratório, garantindo que os serviços at e cron estejam instalados e ativos. Em seguida, praticará a criação de uma tarefa única com o comando at e o gerenciamento da fila de tarefas com atq e atrm. Por fim, utilizará o comando crontab para criar, verificar e remover uma tarefa recorrente do cron, proporcionando uma experiência prática na automação de rotinas de administração de sistemas.

Preparar o Ambiente do Laboratório

Nesta etapa, você preparará o ambiente do laboratório instalando as ferramentas necessárias para o agendamento de tarefas no Linux. As duas ferramentas principais que utilizaremos são o at para tarefas únicas e o cron para tarefas recorrentes. Embora o cron geralmente venha pré-instalado na maioria dos sistemas Linux, o utilitário at pode precisar ser instalado manualmente.

Primeiro, vamos atualizar a lista de pacotes para garantir que possamos obter a versão mais recente do software.

sudo apt-get update

Você verá a saída conforme as listas de pacotes são baixadas dos repositórios.

Em seguida, instale o pacote at usando o comando apt-get. A flag -y confirma automaticamente a instalação, para que você não precise intervir.

sudo apt-get install -y at

A saída mostrará o progresso da instalação. Assim que for concluída, o comando at estará disponível em seu sistema.

O comando at depende de um serviço de segundo plano (daemon) chamado atd para executar as tarefas agendadas. Precisamos garantir que esse serviço esteja em execução. Você pode verificar o status dele com o comando systemctl.

sudo systemctl status atd

A saída deve indicar que o serviço está active (running).

● atd.service - Deferred execution scheduler
     Loaded: loaded (/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
     Active: active (running) since <date_time>; <time_ago>
       Docs: man:atd(8)
   Main PID: <pid> (atd)
      Tasks: 1 (limit: 4622)
     Memory: 248.0K
        CPU: 11ms
     CGroup: /system.slice/atd.service
             └─<pid> /usr/sbin/atd -f

Se o serviço não estiver ativo, você pode iniciá-lo com o seguinte comando:

sudo systemctl start atd

Por fim, vamos verificar se o serviço cron também está ativo, pois o utilizaremos em uma etapa posterior.

sudo systemctl status cron

A saída também deve mostrar active (running), confirmando que o daemon cron está pronto para lidar com as tarefas agendadas.

● cron.service - Regular background program processing daemon
     Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
     Active: active (running) since <date_time>; <time_ago>
       Docs: man:cron(8)
   Main PID: <pid> (cron)
      Tasks: 1 (limit: 4622)
     Memory: 1.1M
        CPU: 40ms
     CGroup: /system.slice/cron.service
             └─<pid> /usr/sbin/cron -f

Com os serviços atd e cron em execução, seu ambiente está totalmente preparado para o agendamento de processos.

Agendar uma Tarefa Única com o Comando at

Nesta etapa, você aprenderá a usar o comando at para agendar uma tarefa a ser executada uma única vez no futuro. Isso é útil para executar scripts ou comandos que você não precisa rodar imediatamente, mas que também não precisam ser repetidos regularmente. O comando at lê uma série de comandos da entrada padrão e os agrupa em um único "at-job" que será executado no horário especificado.

Vamos agendar um comando simples que criará um arquivo chamado at_output.txt no diretório do seu projeto atual (~/project). Vamos configurá-lo para rodar daqui a um minuto.

Primeiro, invoque o comando at com a especificação de tempo desejada.

at now + 1 minute

Depois de pressionar Enter, o prompt do seu terminal mudará para at>. Isso indica que o at está aguardando que você insira os comandos que deseja agendar. Agora, digite o comando para criar o arquivo e escrever um texto nele.

echo "The at job executed successfully." > ~/project/at_output.txt

Pressione Enter após digitar o comando. Para finalizar a tarefa e sair do prompt at>, pressione Ctrl-D (mantenha a tecla Ctrl pressionada e aperte D). Você verá uma mensagem de confirmação informando que a tarefa foi agendada, junto com o número da tarefa e o horário de execução.

warning: commands will be executed using /bin/sh
job 1 at Mon Jan 1 12:01:00 2024

Agora, você precisa aguardar um minuto para que a tarefa agendada seja executada.

Após passar um minuto, você pode verificar se a tarefa foi executada conferindo a existência do arquivo at_output.txt. Use o comando ls -l para ver os detalhes do arquivo.

ls -l ~/project/at_output.txt

Se a tarefa foi executada com sucesso, o arquivo aparecerá na listagem.

-rw-r--r-- 1 labex labex 35 Jan  1 12:01 /home/labex/project/at_output.txt

Em seguida, visualize o conteúdo do arquivo usando o comando cat para garantir que o comando echo funcionou como esperado.

cat ~/project/at_output.txt

Você deve ver a seguinte saída no seu terminal:

The at job executed successfully.

Por fim, para manter o diretório do seu projeto limpo para as próximas etapas, remova o arquivo que você acabou de criar.

rm ~/project/at_output.txt

Você agendou, verificou e limpou com sucesso uma tarefa única usando o comando at.

Gerenciar Tarefas Pendentes com atq e atrm

Nesta etapa, você aprenderá a visualizar e cancelar tarefas agendadas no at. É comum agendar uma tarefa e depois perceber que ela não é mais necessária ou precisa ser modificada. O comando atq permite ver a fila de tarefas pendentes, e o comando atrm permite removê-las.

Primeiro, vamos agendar uma tarefa para um futuro distante o suficiente para termos tempo de gerenciá-la. Agendaremos um comando para rodar em 10 minutos.

at now + 10 minutes

No prompt at>, insira um comando para criar um arquivo. Chamaremos o arquivo de temporary_job.txt.

touch ~/project/temporary_job.txt

Pressione Enter e depois Ctrl-D para salvar a tarefa. O sistema confirmará a criação e exibirá o número da tarefa. Anote este número da tarefa, pois você precisará dele para removê-la.

warning: commands will be executed using /bin/sh
job 2 at Mon Jan 1 12:10:00 2024

(Nota: O número da sua tarefa e o horário serão diferentes.)

Agora, para ver a lista de todas as suas tarefas pendentes, use o comando atq (at queue).

atq

A saída listará sua tarefa agendada, mostrando o número da tarefa, a data e hora programadas, a fila em que se encontra (a) e o usuário que a agendou.

2 Mon Jan 1 12:10:00 2024 a labex

Suponha que você decidiu que não quer mais que esta tarefa seja executada. Você pode cancelá-la usando o comando atrm (at remove), seguido pelo número da tarefa que você anotou anteriormente.

Substitua <job_number> no comando abaixo pelo número real da sua tarefa. Por exemplo, se o número da sua tarefa for 2, você executará atrm 2.

atrm <job_number>

O comando não produzirá nenhuma saída se remover a tarefa com sucesso.

Para verificar se a tarefa foi removida da fila, execute o atq novamente.

atq

Desta vez, o comando não deve produzir nenhuma saída. Esse silêncio confirma que sua fila de tarefas at está vazia e o arquivo temporary_job.txt não será criado.

Criar uma Tarefa Recorrente com crontab -e

Nesta etapa, você aprenderá a agendar uma tarefa recorrente usando o cron. Ao contrário do at, que executa uma tarefa apenas uma vez, o cron é projetado para executar tarefas repetidamente de acordo com um cronograma. Você gerenciará suas tarefas agendadas em um arquivo especial chamado crontab.

Para editar o arquivo crontab do seu usuário, utilize o comando crontab -e. O -e significa "edit" (editar).

Vamos abrir o arquivo crontab para edição.

crontab -e

Se esta for a primeira vez que você executa o crontab -e, poderá ser solicitado que escolha um editor de texto padrão. Recomendamos o nano por ser fácil de usar.

Select an editor. To change later, run 'select-editor'.
  1. /bin/nano        <---- mais fácil
  2. /usr/bin/vim.basic
  ...

Choose 1-2 [1]:

Pressione 1 e depois Enter para selecionar o nano. O arquivo crontab será aberto. Ele estará quase vazio, exceto por alguns comentários explicando como usá-lo.

Uma entrada no crontab possui um formato específico com seis campos: minuto hora dia-do-mês mês dia-da-semana comando

Um asterisco (*) em um campo de tempo atua como um curinga, significando "todos" ou "cada". Para nossa tarefa, queremos executar um comando a cada minuto. Isso é ideal para testes, pois não precisamos esperar muito para ver o resultado. O agendamento para "cada minuto" é * * * * *.

Agora, adicione uma nova linha ao final do arquivo para agendar uma tarefa que anexa a data e hora atuais a um arquivo de log chamado cron_log.txt no diretório do seu projeto.

* * * * * date >> ~/project/cron_log.txt

Após adicionar a linha, seu editor deve estar parecido com isto:

## Edit this file to introduce tasks to be run by cron.
#
## Each task to run has to be defined through a single line
## indicating with different fields when the task will be run
## and what command to run for the task
#
## To define the time you can provide concrete values for
## minute (m), hour (h), day of month (dom), month (mon),
## and day of week (dow) or use '*' in these fields (for 'any').
#
## Notice that tasks will be started based on the cron's system
## daemon's notion of time and timezones.
#
## Output of the crontab jobs (including errors) is sent through
## email to the user the crontab file belongs to (unless redirected).
#
## For example, you can run a backup of all your user accounts
## at 5 a.m. every week with:
## 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
## For more information see the manual pages of crontab(5) and cron(8)
#
## m h  dom mon dow   command
* * * * * date >> ~/project/cron_log.txt

Para salvar o arquivo e sair do nano, pressione Ctrl-X, depois pressione Y para confirmar as alterações e, por fim, pressione Enter para gravar no arquivo.

Assim que sair, você verá uma mensagem de confirmação no seu terminal:

crontab: installing new crontab

Isso significa que sua nova tarefa do cron está ativa. O daemon cron agora verificará este arquivo a cada minuto e executará seu comando.

Aguarde pelo menos um minuto. Em seguida, verifique se o arquivo de log foi criado.

ls -l ~/project/cron_log.txt

Você deve ver o arquivo listado.

-rw-r--r-- 1 labex labex 29 Jan  1 12:15 /home/labex/project/cron_log.txt

Agora, visualize o conteúdo dele.

cat ~/project/cron_log.txt

A saída mostrará a data e a hora em que o comando foi executado pela primeira vez.

Mon Jan  1 12:15:01 UTC 2024

Se você esperar mais um minuto e executar o comando cat novamente, verá uma nova linha com um carimbo de data/hora atualizado, demonstrando que a tarefa está sendo executada repetidamente.

Verificar e Remover uma Tarefa do Cron com crontab -l e -r

Nesta etapa final, você aprenderá como visualizar suas tarefas agendadas no cron sem abrir o editor e como removê-las inteiramente. Estas são tarefas de gerenciamento essenciais para manter as rotinas agendadas do seu sistema organizadas e limpas.

Primeiro, vamos listar as tarefas do cron atualmente ativas. O comando crontab -l (onde -l significa "list") exibe o conteúdo do seu arquivo crontab diretamente no terminal.

crontab -l

A saída mostrará a tarefa que você criou na etapa anterior.

## Edit this file to introduce tasks to be run by cron.
## ... (outros comentários) ...
## m h  dom mon dow   command
* * * * * date >> ~/project/cron_log.txt

Este comando é uma forma segura e apenas de leitura para verificar quais tarefas estão agendadas.

Agora, vamos supor que você não precise mais desta tarefa recorrente. Para removê-la, você pode usar o comando crontab -r (onde -r significa "remove"). Tenha muito cuidado com este comando, pois ele remove o arquivo crontab inteiro do seu usuário sem pedir confirmação.

Execute o comando para remover seu crontab.

crontab -r

O comando não produzirá nenhuma saída se for bem-sucedido.

Para verificar se o seu crontab foi excluído, execute o comando de listagem novamente.

crontab -l

Desta vez, o comando retornará uma mensagem de erro indicando que você não possui mais um arquivo crontab.

no crontab for labex

Isso confirma que sua tarefa agendada foi removida com sucesso e não será mais executada.

Por fim, para concluir o laboratório e limpar seu espaço de trabalho, remova o arquivo cron_log.txt que foi criado pela tarefa do cron.

rm ~/project/cron_log.txt

Você listou, removeu e verificou com sucesso a remoção de uma tarefa do cron, completando todo o ciclo de vida de gerenciamento.

Resumo

Neste laboratório, você aprendeu como preparar um ambiente Linux para o agendamento de tarefas, instalando o pacote at e verificando se os serviços atd e cron estavam ativos. Você praticou o agendamento de uma tarefa única para execução futura usando o comando at. Também aprendeu a gerenciar essas tarefas pendentes visualizando a fila com atq e removendo uma tarefa específica com atrm.

Além disso, você explorou como agendar tarefas recorrentes usando o cron. Utilizou o comando crontab -e para editar o arquivo crontab do usuário e adicionar uma nova tarefa automatizada. Por fim, aprendeu a verificar a lista de tarefas cron atualmente agendadas com crontab -l e como remover todas as tarefas cron agendadas de um usuário usando o comando crontab -r.