Configurando um temporizador monotônico com systemd

Um temporizador monotônico do systemd é um tipo de agendamento que inicia sua contagem a partir de um ponto de referência temporal específico, como a inicialização do sistema ou o início de um serviço. Ao contrário dos temporizadores baseados no relógio do sistema (como OnCalendar), ele dispara após um intervalo de tempo relativo a esse evento de referência, tornando-o imune a alterações manuais no relógio do sistema. Isso é particularmente útil para agendar tarefas que devem ocorrer em intervalos regulares após a inicialização ou para implementar atrasos na execução de um serviço.

Criação da Tarefa e da Unidade de Serviço

Primeiro, vamos criar um script de tarefa e o arquivo de unidade de serviço correspondente. Este exemplo monitora o status de um serviço hipotético e registra a saída.

1. Script de tarefa:

#!/bin/bash
# tarefa_monitoramento.sh
STATUS=$(systemctl is-active ssh)
echo "$(date): Status do serviço SSH = ${STATUS}" >> /var/log/status_servico.log

Torne-o executável:

chmod +x /tarefa_monitoramento.sh

2. Unidade de Serviço: Crie o arquivo servico_monitoramento.service em /etc/systemd/system/.

[Unit]
Description=Serviço de Monitoramento Periódico

[Service]
Type=oneshot
ExecStart=/tarefa_monitoramento.sh

Configuração da Unidade de Temporizador

Em seguida, crie a unidade de temporizador (timer_monitoramento.timer) na mesma pasta. As diretivas OnBootSec e OnUnitActiveSec são a essência do agendamento monotônico.

[Unit]
Description=Temporizador para executar monitoramento periodicamente

[Timer]
OnBootSec=60s
OnUnitActiveSec=300s
AccuracySec=1s

[Install]
WantedBy=timers.target

Nesta configuração, a tarefa será executada 60 segundos após a inicialização do sistema (OnBootSec=60s) e, subsequentemente, a cada 300 segundos (5 minutos) a partir da última ativação (OnUnitActiveSec=300s). A diretiva AccuracySec define a tolerância do agendador para agrupar ativações.

Considerações de Segurança (SELinux)

Se o SELinux estiver em modo Enforcing, ele pode bloquear a execução do script pelo systemd. Para verificar o estado atual:

getenforce

Se necessário e em ambientes de teste, o modo pode ser alterado temporariamente para Permissive com:

setenforce 0

Lembre-se de redefinir a política do SELinux ou criar as regras de contexto apropriadas para ambientes de produção.

Ativação e Verificação

Após criar os arquivos, recarregue a configuração do daemon do systemd:

systemctl daemon-reload

Ative e inicie o temporizador (não o serviço diretamente):

systemctl enable timer_monitoramento.timer
systemctl start timer_monitoramento.timer

Para verificar se o temporizador está agendado e ativo:

systemctl list-timers --all
systemctl status timer_monitoramento.timer

Após o tempo especificado (OnBootSec), o temporizador acionará a unidade servico_monitoramento.service. Você pode acompanhar o log gerado pelo script para confirmar a execução:

tail -f /var/log/status_servico.log

Tags: systemd Timer Service monotonic Linux

Publicado em 8-4 09:37