Inicie o serviço interrompido devido à atualização de dependência

3

Eu tenho dois serviços systemd: postgresql.service e app.service . postgresql.service é distribuição fornecida (ubuntu 15.10) e app.service é escrito por mim mesmo.

Como app precisa de postgresql , o serviço parece:

[Unit]
Description=Start App

Requires=postgresql.service
After=postgresql.service

[Install]
WantedBy=multi-user.target

[Service]
Restart=always
ExecStart=/path/to/app

Agora, hoje postgresql foi atualizado. É claro que reiniciou o postgresql.service após a atualização automaticamente. Mas isso matou meu app.service , porque requer postgresql :

# systemctl status app
[...]
Apr 08 12:04:42 host systemd[1]: Stopping Start App...
Apr 08 12:04:42 host systemd[1]: Stopped Start App.

Apr 08 12:04:42 é a hora em que a atualização de postgresql aconteceu.

Como posso alterar o app.service para que ele não seja simplesmente eliminado quando postgresql for reiniciado, mas (re) será iniciado automaticamente também (somente quando ativado, é claro)?

Ou para fazer outra pergunta: como posso configurar app.service que sempre inicia automaticamente depois de postgresql.service quando app.service está ativado? Então, basicamente, um systemctl start postgresql primeiro começa com postgresql e, em seguida, automaticamente app .

    
por Markus 08.04.2016 / 12:26

2 respostas

1

Acho que o systemd deseja que eu use Wants em vez de Requires . Do manual:

Requires=

Configures requirement dependencies on other units. If this unit gets activated, the units listed here will be activated as well. If one of the other units gets deactivated or its activation fails, this unit will be deactivated. [...] Often, it is a better choice to use Wants= instead of Requires= in order to achieve a system that is more robust when dealing with failing services.

Agora usando Wants e isso parece ser o que eu realmente quero que um sistema robusto lide com serviços com falha. Então eu faço.

    
por 14.05.2016 / 11:36
0

Você pode adicionar postgresql.service aos seus serviços WantedBy

[Unit]
Description=Start App

Requires=postgresql.service
After=postgresql.service

[Install]
WantedBy=multi-user.target postgresql.service

[Service]
Restart=always
ExecStart=/path/to/app

Não se esqueça de systemctl reenable app.service após systemctl daemon-reload para deixar o systemd criar o novo symlink

    
por 20.10.2016 / 10:45