Configurar timers systemd para tarefas recorrentes
Nesta etapa, você aprenderá sobre os timers systemd, que são uma alternativa moderna ao cron para agendar tarefas em sistemas Linux. Os timers systemd oferecem mais flexibilidade e melhor integração com o ecossistema systemd. Embora os comandos systemctl sejam normalmente usados para gerenciar unidades systemd, devido ao ambiente do contêiner Docker, focaremos na criação e verificação dos arquivos de unidade de timer e serviço diretamente.
Os timers systemd funcionam em conjunto com as unidades de serviço systemd. Uma unidade de timer (arquivo .timer) define quando uma tarefa deve ser executada, e uma unidade de serviço (arquivo .service) define qual tarefa deve ser executada.
Continuaremos trabalhando no sistema local para explorar a configuração de timers systemd.
Você precisará de privilégios de root para criar arquivos de unidade systemd em diretórios do sistema. Como o usuário labex tem acesso sudo, podemos usar sudo para os comandos necessários.
Vamos criar um serviço simples que registra uma mensagem em um arquivo. Colocaremos este arquivo de unidade de serviço em /etc/systemd/system/, que é onde as unidades de serviço personalizadas são normalmente armazenadas.
Crie o arquivo de unidade de serviço /etc/systemd/system/my-custom-task.service:
sudo nano /etc/systemd/system/my-custom-task.service
Adicione o seguinte conteúdo ao arquivo:
[Unit]
Description=My Custom Scheduled Task
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo "My custom task executed at $(date)" >> /var/log/my-custom-task.log'
Salve e saia do editor (Ctrl+o, Enter, Ctrl+x no nano).
Em seguida, crie o arquivo de unidade de timer /etc/systemd/system/my-custom-task.timer. Este timer ativará nosso serviço a cada 5 minutos.
sudo nano /etc/systemd/system/my-custom-task.timer
Adicione o seguinte conteúdo ao arquivo:
[Unit]
Description=Run My Custom Scheduled Task every 5 minutes
[Timer]
OnCalendar=*:0/5
Persistent=true
[Install]
WantedBy=timers.target
Salve e saia do editor.
Explicação de OnCalendar:
*:0/5 significa "a cada 5 minutos".
* para ano, mês, dia, hora (qualquer valor).
0/5 para minuto, significando começando no minuto 0, a cada 5 minutos (0, 5, 10, ..., 55).
Em um ambiente systemd típico, você agora executaria systemctl daemon-reload para que o systemd estivesse ciente dos novos arquivos de unidade e, em seguida, systemctl enable --now my-custom-task.timer para iniciar o timer. No entanto, devido às limitações do contêiner Docker, systemctl não é totalmente funcional.
Em vez disso, verificaremos manualmente a criação dos arquivos. O daemon systemd dentro do contêiner pode pegar esses arquivos eventualmente, mas não podemos controlar ou observar diretamente sua execução do timer nesta configuração de laboratório. O objetivo principal aqui é entender como configurar esses arquivos.
Vamos verificar a existência dos arquivos criados:
ls -l /etc/systemd/system/my-custom-task.service
ls -l /etc/systemd/system/my-custom-task.timer
Você deve ver a saída indicando que ambos os arquivos existem.
Para simular a execução do serviço, você pode executar manualmente o comando definido em ExecStart:
sudo /bin/bash -c 'echo "My custom task executed at $(date)" >> /var/log/my-custom-task.log'
Agora, verifique o arquivo de log para ver a saída:
sudo cat /var/log/my-custom-task.log
Você deve ver a mensagem que acabou de registrar:
My custom task executed at Tue Jun 10 06:54:40 UTC 2025
Isso conclui a etapa de configuração do timer systemd. Os arquivos de unidade de serviço e timer permanecerão no local para referência.