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.



