이후= 시스템 서비스 파일에서 옵션이 작동하지 않습니다.

이후= 시스템 서비스 파일에서 옵션이 작동하지 않습니다.

first.sh와 second.sh라는 두 개의 쉘 스크립트가 있습니다. first.sh 및 second.sh의 내용은 다음과 같습니다.

    >>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

마찬가지로 first.service의 내용은 다음과 같습니다.

[Unit]
Description=first service
After=second.service
[Service]
ExecStart=/home/abanstola/first.sh

second.service의 내용은 다음과 같습니다.

[Unit]
Description=Second service
[Service]
ExecStart=/home/abanstola/second.sh

After=second.servicefirst.service 코드 를 참고하세요 . 문서에 따르면 두 번째 서비스가 시작될 때까지 첫 번째 서비스가 실행되어서는 안 됩니다. 그런데 두 번째 서비스를 비활성화하거나 중지해도 첫 번째 서비스는 문제 없이 실행됩니다. 내가 여기서 뭘 잘못하고 있는 걸까?

답변1

문서를 잘못 읽었습니다.인용하다:

장치 foo.service에 설정이 포함된 경우Before=bar.service 두 장치가 모두 시작되고 있습니다, bar.service님의 시작은 foo.service이 시작이 완료될 때까지 지연됩니다. After=Before=의 반대입니다.

내가 강조 표시합니다. 이는 두 장치가 모두 시작되는 경우에만 영향을 미칩니다. 그 중 하나를 비활성화하면 아무 효과가 없습니다.

실제로 원하는 것이 무엇인지 명확하지 않습니다.

아마도 더 나은 선택은 다음과 같습니다.

Requires=

와 유사 Wants=하지만 더 강력한 요구 사항 종속성을 선언합니다. 이 유형의 종속성은 .requires/유닛 파일과 함께 제공되는 디렉터리 에 심볼릭 링크를 추가하여 구성할 수도 있습니다 .

이 유닛이 활성화되면 나열된 유닛도 활성화됩니다. 다른 장치 중 하나가 활성화되지 않고 실패한 장치에 대한 순서 종속성이 After=설정된 경우 이 장치는 시작되지 않습니다. 또한 를 지정하거나 지정하지 않고 After=다른 장치 중 하나가 명시적으로 중지되면 이 장치가 중지됩니다.

PartOf=

와 유사하게 종속성을 구성 Requires=하지만 장치 중지 및 다시 시작으로 제한됩니다. systemd가 여기에 나열된 장치를 중지하거나 다시 시작하면 작업이 이 장치에 전파됩니다. 이는 단방향 종속성입니다. 이 단위를 변경해도 나열된 단위에는 영향을 미치지 않습니다.

관련 정보