Eu escrevi um programa que usa um banco de dados Postgres e escrevi um arquivo de serviço systemd para ele. Atualmente, meu serviço é iniciado na inicialização muito bem e é interrompido quando o Postgres é interrompido para atualização (por apt upgrade
). No entanto, quando a atualização é concluída e o Postgres é iniciado novamente, meu serviço não é iniciado automaticamente.
Posso definir alguma dependência para iniciar meu serviço novamente automaticamente?
Este é o status do meu serviço depois que ele foi automaticamente interrompido durante a atualização do Postgres:
● tabill.service - My service
Loaded: loaded (/srv/tabill/tabill.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Tue 2017-07-04 00:29:24 EEST; 44min ago
Main PID: 1048 (code=killed, signal=TERM)
Observe que eu posso iniciar o serviço manualmente novamente corretamente.
Aqui está o meu arquivo de serviço:
[Unit]
Description=My service
Wants=nginx.service
Requires=postgresql.service
After=postgresql.service
[Service]
Type=simple
ExecStart=/srv/tabill/app/serve
Restart=always
TimeoutSec=60
[Install]
WantedBy=multi-user.target
Tentei adicionar PartOf=postgresql.service
e BindsTo=postgresql.service
, em seguida, interromper e iniciar manualmente o Postgres, mas nenhum deles ajudou.
É claro que eu poderia remover o arquivo Requires
, mas é preferível interromper os dois serviços juntos, se eles iniciarem novamente.
Requires=
removido, isso não ajudou. Eu acho que o problema é que os PartOf=
links "interrompem e reiniciam as unidades", mas o Postgres não é reiniciado durante uma atualização. Parou, atualizou e começou.
systemctl restart postgresql
, o systemd lembra de reiniciar seus serviços dependentes novamente. Parece que o apt, por alguma razão, combina stop
e start
não restart
.
PartOf=
Parece a solução certa. Você tentouRequires=
remover?