inicie um serviço systemd pouco antes do desligamento

inicie um serviço systemd pouco antes do desligamento

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

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

https://superuser.com/questions/1016827/how-do-i-run-a-script-before-everything-else-on-shutdown-with-systemd

Aqui está o que estou fazendo com minha 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. Embora funcione bem se eu executá-lo com systemctl start service_name.

Quando olhei para o log do banco de dados, pude ver uma mensagem "LOG: solicitação de desligamento inteligente recebida", que é a mensagem quando o cluster do banco de dados fica inativo no modo normal, que é o que o sistema operacional desligando faz quando eu encerro o host com um " desligamento -h agora". O que eu quero ver é "LOG: solicitação de desligamento rápido recebida", que é um desligamento rápido (modo imediato) que ocorre quando executo 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

Também tentei abandonar a [Install]seção, mas o systemctl não me permitiu ativar o serviço sem a [Install]seção. alguém pode por favor me dizer a direção correta.

Responder1

systemdfoi projetado para lidar com este caso de maneira limpa. Você pode fazer isso criando um pequeno arquivo especificando um comando que 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 os documentos oficiais paraEstendendo a configuração padrãoe também documentos oficiais para oExecStop=e ExecStopPost=.

informação relacionada