After= opção não funciona no arquivo de serviço systemd

After= opção não funciona no arquivo de serviço systemd

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.serviceno 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.servicecontiver a configuraçãoBefore=bar.service e ambas as unidades estão sendo iniciadas, bar.servicea inicialização de é atrasada até que foo.servicea 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:

Requires=

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ção After=, esta unidade será parada se uma das outras unidades for explicitamente parada.

PartOf=

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.

informação relacionada