1
resposta

Como automatizar nosso script com 'systemd' (em vez de 'cron')

Fala, galera!

Até agora, a gente fez um script de monitoramento bem completo, mas ele só roda quando a gente executa ele na mão. A ideia agora é fazer o sistema rodar ele para a gente, tipo, a cada 15 minutos.

Muita gente conhece o 'Cron' para isso, mas vamos ver como fazer com o 'systemd', que é o sistema que o Linux moderno usa para gerenciar serviços (é o 'pai' de quase todos os processos).

O 'systemd' é super poderoso, especialmente se você quisesse que algo ficasse rodando 24/7 (como um site). Para a nossa tarefa (rodar a cada 15 min), a gente vai usar duas partes dele: um 'service' e um 'timer'.

  1. Preparando o Script
    Primeiro, a gente precisa mover nosso script para um lugar "padrão" do sistema, onde o 'systemd' possa achar e ter permissão para rodar.

Vamos mover ele para '/usr/local/bin/':

sudo mv monitoramento-sistema.sh /usr/local/bin/monitoramento-sistema.sh

Depois de mover, a gente precisa dar permissão de execução de novo (o 'sudo' é porque estamos mexendo em uma pasta do sistema):

sudo chmod +x /usr/local/bin/monitoramento-sistema.sh

  1. Criando o 'O Quê' (O .service)
    Agora, vamos para a pasta onde o 'systemd' guarda as configurações de serviço:

cd /etc/systemd/system

Aqui, a gente vai criar um arquivo que diz o que o 'systemd' deve fazer. Vamos chamar de 'monitoramento-sistema.service'.

sudo vim monitoramento-sistema.service

Dentro do arquivo, a gente cola isso:

[Unit] Description=Script de Monitoramento de Servidor Wants=monitoramento-sistema.timer

[Service] Type=oneshot ExecStart=/usr/local/bin/monitoramento-sistema.sh

[Install] WantedBy=multi-user.target

O que isso quer dizer:

[Unit]: É a descrição. O 'Wants=' é a parte chave: ele diz que esse serviço "quer" (depende de) um timer com o mesmo nome. É o que amarra as duas coisas.

[Service]: 'Type=oneshot' significa "rode o comando uma vez e saia". É exatamente o que nosso script faz. 'ExecStart=' é o caminho para o script que ele deve rodar.

[Install]: É o padrão, dizendo para carregar esse serviço junto com o sistema.

Depois de colar, salve e saia (Esc, :wq).

  1. Criando o 'Quando' (O .timer)
    A gente já disse 'o quê' fazer, agora falta dizer 'quando' fazer. Na mesma pasta ('/etc/systemd/system'), vamos criar o 'timer':

sudo vim monitoramento-sistema.timer

Dentro dele, colamos o seguinte:

[Unit] Description=Timer para execução periódica do Monnitoramento de Servidor

[Timer] OnCalendar=*:0/15 Persistent=true

[Install] WantedBy=timers.target

O que isso quer dizer:

[Unit]: Só a descrição do timer.

[Timer]: Aqui está a mágica.

'OnCalendar=*:0/15': Essa é a sintaxe do 'systemd' para "a cada 15 minutos".

'Persistent=true': Isso é muito legal. Significa que se o computador estava desligado na hora que o script deveria rodar, ele roda assim que o computador ligar.

[Install]: Padrão para 'timers'.

Salve e saia (Esc, :wq).

Resumo
Pronto! A gente criou os dois arquivos de configuração. O 'monitoramento-sistema.service' (o quê) e o 'monitoramento-sistema.timer' (o quando).

O 'timer' vai "disparar" a cada 15 minutos, e quando ele disparar, ele vai ativar o 'service' que a gente criou.

O próximo passo agora é avisar o 'systemd' sobre esses arquivos novos e ativar eles, mas a parte da criação já está feita!

1 resposta

Oi, João! Como vai?

Agradeço por compartilhar.

Gostei da sua explicação sobre o uso do systemd e a forma como você comparou com o cron. Ficou claro o passo a passo da criação do .service e do .timer, mostrando bem a diferença entre o “o quê” e o “quando” da execução.

Continue explorando essas automações, elas são muito úteis para o dia a dia de quem administra sistemas Linux.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!