
Eu tenho dois scripts de shell chamados first.sh e second.sh. O conteúdo de first.sh e second.sh é fornecido abaixo:
>>first.sh
#!/bin/bash
while true
do
echo The current time is $(date)
sleep(1)
done
>>second.sh
#!/bin/bash
while true
do
echo The current time from second script is $(date)
sleep(1)
done
Da mesma forma, o conteúdo de first.service é:
[Unit]
Description=first service
After=second.service
[Service]
ExecStart=/home/abanstola/first.sh
O conteúdo de second.service é:
[Unit]
Description=Second service
[Service]
ExecStart=/home/abanstola/second.sh
Observe o After=second.service
no código first.service. De acordo com os documentos, o primeiro serviço não deve estar em execução até que o segundo serviço seja iniciado. Mas mesmo que eu desative ou interrompa o segundo serviço, o primeiro serviço será executado sem problemas. O que estou fazendo de errado aqui?
Responder1
Você leu mal a documentação.Citar:
Se a unidade
foo.service
contiver a configuraçãoBefore=bar.service
e ambas as unidades estão sendo iniciadas,bar.service
a inicialização de é atrasada até quefoo.service
a inicialização seja concluída.After=
é o inverso de Antes =
Destaque por mim. Isto só tem efeito se ambas as unidades estiverem sendo iniciadas. Se você desabilitar um deles, não terá efeito.
Não está muito claro o que você realmente deseja.
Provavelmente as melhores escolhas são:
Semelhante a
Wants=
, mas declara uma dependência de requisitos mais forte. Dependências deste tipo também podem ser configuradas adicionando um link simbólico a um.requires/
diretório que acompanha o arquivo da unidade.Se esta unidade for ativada, as unidades listadas também serão ativadas. Se uma das outras unidades não for ativada e uma dependência de ordem
After=
na unidade com falha for definida, esta unidade não será iniciada. Além disso, com ou sem especificaçãoAfter=
, esta unidade será parada se uma das outras unidades for explicitamente parada.
Configura dependências semelhantes a
Requires=
, mas limitadas à parada e reinicialização de unidades. Quando o systemd para ou reinicia as unidades listadas aqui, a ação é propagada para esta unidade. Observe que esta é uma dependência unilateral — as alterações nesta unidade não afetam as unidades listadas.