Reinicie a unidade do Systemd após a dependência

1

Eu tenho um aplicativo da web iniciado por systemd . Ele usa o Postgresql como banco de dados, por isso depende dele. Aqui está o arquivo de unidade do meu aplicativo da web (removi as partes não relevantes / sensíveis):

[Unit]
Description=xxxx
Requires=postgresql.service
After=network.target postgresql.service

[Service]
Type=simple
PermissionsStartOnly=true
SyslogIdentifier=xx-service
User=yyy
Group=zzz
ExecStart=/opt/.../xx
WorkingDirectory=/opt/xx
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target

O host os é o servidor Ubuntu 16.04.

Recentemente, tive um evento em que o aplicativo da web não estava funcionando de manhã quando voltei ao trabalho. Depois de verificar os logs, descobri que o serviço foi interrompido por systemd porque postgresql teve uma atualização. Aparentemente aptitude parou postgresql antes da atualização e reiniciou-a após a atualização. Quando eu entrei na máquina estava correndo.

Mas systemd decidiu parar meu aplicativo da web antes de parar postgresql , o que é legal, mas não reiniciou o aplicativo da web depois que ele reiniciou postgresql .

Como instruir o systemd a reiniciar o aplicativo depois que postgresql service for reiniciado?

    
por Antoine 13.02.2018 / 11:53

1 resposta

3

Acho que você está procurando PartOf :

PartOf= Configures dependencies similar to Requires=, but limited to stopping and restarting of units. When systemd stops or restarts the units listed here, the action is propagated to this unit. Note that this is a one-way dependency — changes to this unit do not affect the listed units.

When PartOf=b.service is used on a.service, this dependency will show as ConsistsOf=a.service in property listing of b.service. ConsistsOf= dependency cannot be specified directly.

Adicione PartOf=postgresql.service ao arquivo de unidade de seu aplicativo da Web, recarregue systemctl-daemon e teste.

E para resolver a situação em que seu aplicativo da web terá que iniciar automaticamente depois que postgresql.service começar, você poderá combinar PartOf com Wants , mas no arquivo de unidade postgresql :

Wants= A weaker version of Requires=. Units listed in this option will be started if the configuring unit is. However, if the listed units fail to start or cannot be added to the transaction, this has no impact on the validity of the transaction as a whole. This is the recommended way to hook start-up of one unit to the start-up of another unit.

Note that dependencies of this type may also be configured outside of the unit configuration file by adding symlinks to a .wants/ directory accompanying the unit file. For details, see above.

    
por 13.02.2018 / 11:58