terça-feira, 12 de maio de 2026

Templates de Serviços com o systemd

Aos poucos estou começando a gostar do systemd. Minha última descoberta foram os templates, os quais permitem usar um único arquivo de configuração para gerenciar vários sistemas semelhantes.

Eu administro vários bancos Oracle que possuem integração com outros bancos via um mecanismo muito precário chamado Heterogeneous Services. O FDW do Postgresql é muito melhor, mas não é importante para esta discussão.

Infelizmente, o Oracle desliga os listeners desses serviços sem qualquer motivo aparente. Então, resolvi experimentar criar um serviço do systemd para cada um. Eu não queria ter que criar um arquivo para cada serviço, então descobri os templates.

Criei um arquivo chamado hs-listener@.service. O arroba indica que é um template.


[Unit]
Description=Oracle HS Listener %I
After=network.target

[Service]
Type=forking
User=grid
Group=oinstall
Environment="ORACLE_HOME=/u02/app/23.0.0.0/gridhome_1/"
ExecStart=/u02/app/23.0.0.0/gridhome_1/bin/lsnrctl start listener_%i
ExecStop= /u02/app/23.0.0.0/gridhome_1/bin/lsnrctl stop  listener_%i
Restart=always

[Install]
WantedBy=multi-user.target

Dentro do template, %I e %i serão substituídos pelos parâmetros usados a seguir. O %I não é formatado, mas o %i é.


  systemctl enable hs-listener@db2
  systemctl enable hs-listener@pgsql
  systemctl enable hs-listener@mysql
  systemctl enable hs-listener@sqlserver
    

Como se pode perceber, isso evita ter que criar vários arquivos semelhantes.


  systemctl start hs-listener@db2
  systemctl start hs-listener@pgsql
  systemctl start hs-listener@mysql
  systemctl start hs-listener@sqlserver
  

E isto evita ter que investigar o que houve com o listener uma vez por mês.

Nenhum comentário:

Postar um comentário