systemd inicia um serviço apenas se outro serviço for executado sem erros

3

Como posso iniciar uma unidade de serviço somente se outra unidade de serviço for executada sem erros?

Eu tenho duas unidades de serviço:

#echo-date-0.service
[Unit]
Description=

[Service]
ExecStart=/home/user/bash/echo-date-0.sh

[Install]
WantedBy=multi-user.target



#echo-date-1.service
[Unit]
Description=

[Service]
ExecStart=/home/user/bash/echo-date-1.sh
Requires=echo-date-0.service
After=echo-date-0.service

[Install]
WantedBy=multi-user.target

Eu tenho o script echo-date-0.sh retornando o código de saída 1 (saída 1) e, se eu verificar o status do echo-date-0.service, veremos:

Active: failed (Result:exit-code) 
Process: (code=exited, status=1/FAILURE)

Mas, o echo-date-1.service é executado, mesmo que eu tenha exigido o echo-date-0.service. Como posso impedir que o echo-date-1.service seja executado, se o echo-date-0.service falhar?

    
por jes516 20.07.2017 / 18:10

2 respostas

0

Requires= e After= precisam estar na seção [Unit]

    
por 27.05.2018 / 20:40
0
#echo-date-0.service
[Unit]
Description=

[Service]
Type=oneshot
## Stay alive for other services to acknowledge 
RemainAfterExit=yes
ExecStart=/home/user/bash/echo-date-0.sh

[Install]
WantedBy=multi-user.target



#echo-date-1.service
[Unit]
Description=
Requires=echo-date-0.service
After=echo-date-0.service
## A unit that must be in an active non-erroring state
## and combos great with After=
BindsTo=echo-date-0.service

[Service]
ExecStart=/home/user/bash/echo-date-1.sh

[Install]
WantedBy=multi-user.target

Jesse_b foi, pelo menos para mim, correto ao mencionar BindsTo= dentro de systemd.unix seria útil.

Bigon está correto ao afirmar que a seção [Unit] deve ter Requires= & After= .

Efetivamente echo-date-0.service , no exemplo acima (e funcionando esperançosamente), permanece vivo como um serviço (portanto, é necessário executar systemctl stop echo-date-0.service para redefinir o estado), mas configurando as coisas assim e combinando After= & BindsTo= dentro de echo-date-1.service apontando para o serviço que não deve ter erro, isso deve atingir o que o OP está pedindo aqui.

Nesse caso, é possível executar systemctl list-dependencies --before <service/trigger> em echo-date-0.service para exibir serviços vinculados a ele de uma forma ou de outra.

    
por 27.09.2018 / 05:58

Tags