Requires=
e After=
precisam estar na seção [Unit]
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?
Requires=
e After=
precisam estar na seção [Unit]
#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.
Tags systemd