inicia um serviço systemd antes do encerramento

2

Estou desenvolvendo um script de desligamento systemd (arquivo de unidade) para um banco de dados postgresql e segui os dois posts abaixo, mas não consegui fazê-lo funcionar.

Como executar um script com o systemd logo antes do desligamento?

link

Aqui está o que estou fazendo com a instalação do postgresql: Eu escrevi um script de inicialização que inicia o cluster de banco de dados postgresql no momento da inicialização, mas o script de desligamento mostrado abaixo parece não funcionar no momento do desligamento. Enquanto ele funciona bem se eu executar com systemctl start service_name.

Quando examinei o log do banco de dados, vi uma mensagem "LOG: recebido pedido de desligamento inteligente", que é a mensagem quando o cluster de banco de dados fica inativo no modo normal, que é o sistema operacional de desligamento quando eu desligo o host com um "shutdown -h now". O que eu quero ver é "LOG: recebeu pedido de desligamento rápido", que é um desligamento rápido (modo imediato) que ocorre quando eu executar o script com um systemctl start service_name

Aqui está a definição do arquivo de unidade

[Unit]
Description=Database Shutdown
Before=shutdown.target reboot.target halt.target
DefaultDependencies=no
[Service]
ExecStart=/usr/bin/su - postgres -c "/opt/postgres-95/bin/pg_ctl -D /database/inst1/data -w stop &"
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=shutdown.target

Eu também tentei abandonar a seção [Install] , mas o systemctl não me permitiria ativar o serviço sem a seção [Install] . alguém poderia por favor me apontar na direção certa.

    
por Nawaz Ahmed 23.06.2016 / 09:15

1 resposta

1

systemd foi projetado para lidar com esse caso de maneira limpa. Você pode fazer isso criando um pequeno arquivo que especifica um comando que você deseja executar como parte da interrupção do serviço PostgreSQL. Primeiro, crie um diretório chamado:

/etc/systemd/system/postgresql.d/

Nele, crie um arquivo com qualquer nome que termine em .conf , como custom-shutdown.conf . Adicione a esse arquivo algumas linhas como esta:

[Service]
ExecStop=/usr/bin/su - postgres -c "/opt/postgres-95/bin/pg_ctl -D /database/inst1/data -w stop &" 

Você pode querer usar ExecStopPost= dependendo do seu caso.

Veja documentos oficiais para Estendendo a configuração padrão e também os documentos oficiais para o ExecStop= e ExecStopPost= .

    
por 24.06.2016 / 17:23