
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.service
first.service 코드 를 참고하세요 . 문서에 따르면 두 번째 서비스가 시작될 때까지 첫 번째 서비스가 실행되어서는 안 됩니다. 그런데 두 번째 서비스를 비활성화하거나 중지해도 첫 번째 서비스는 문제 없이 실행됩니다. 내가 여기서 뭘 잘못하고 있는 걸까?
답변1
문서를 잘못 읽었습니다.인용하다:
장치
foo.service
에 설정이 포함된 경우Before=bar.service
두 장치가 모두 시작되고 있습니다,bar.service
님의 시작은foo.service
이 시작이 완료될 때까지 지연됩니다.After=
Before=의 반대입니다.
내가 강조 표시합니다. 이는 두 장치가 모두 시작되는 경우에만 영향을 미칩니다. 그 중 하나를 비활성화하면 아무 효과가 없습니다.
실제로 원하는 것이 무엇인지 명확하지 않습니다.
아마도 더 나은 선택은 다음과 같습니다.
와 유사
Wants=
하지만 더 강력한 요구 사항 종속성을 선언합니다. 이 유형의 종속성은.requires/
유닛 파일과 함께 제공되는 디렉터리 에 심볼릭 링크를 추가하여 구성할 수도 있습니다 .이 유닛이 활성화되면 나열된 유닛도 활성화됩니다. 다른 장치 중 하나가 활성화되지 않고 실패한 장치에 대한 순서 종속성이
After=
설정된 경우 이 장치는 시작되지 않습니다. 또한 를 지정하거나 지정하지 않고After=
다른 장치 중 하나가 명시적으로 중지되면 이 장치가 중지됩니다.
와 유사하게 종속성을 구성
Requires=
하지만 장치 중지 및 다시 시작으로 제한됩니다. systemd가 여기에 나열된 장치를 중지하거나 다시 시작하면 작업이 이 장치에 전파됩니다. 이는 단방향 종속성입니다. 이 단위를 변경해도 나열된 단위에는 영향을 미치지 않습니다.