답변:
해결책은 다른 방향에서 문제에 접근하는 것입니다. Centrify의 시작 기준을 충족시키기 위해 기존 서비스를 새로운 Centrify 서비스에 의존하게 만들 필요는 없지만 새로운 Centrify 서비스를 기존 서비스에 의존하게 만들 필요는 없습니다.
예를 들어 Upstart 구성 파일 /etc/init/centrify.conf
은 다음과 같습니다.
시작 (cron 시작 또는 autofs 시작 또는 nis 시작)
이것을 영어로 변환하면 다음과 같이 번역됩니다.
cron, autofs 또는 nis start (둘 중 먼저 시작하는) 직전에 Centrify 서비스를 시작하십시오 .
cron, autofs 또는 nis 시작 순서는 관련이 없습니다. Upstart는 어떤 서비스가 먼저 시작되기 전에 Centrify가 시작되도록하여 서비스가 시작되기 전에 Centrify가 실행되도록합니다.
Upstart는 Centrify가 실행되기 시작할 때까지 시작하려는 첫 번째 서비스의 시작을 차단합니다.
이런 식으로 생각하는 데 익숙해지면 매우 우아하고 단순합니다.
start on (started nginx)
새 스크립트에서 사용할 수 없습니까?
start on (started nginx)
"nginx 후에 서비스 시작"을 의미합니다. "필요하기 때문에 nginx를 시작하기 전에 시작"과 동일하지 않습니다.
James의 답변은 1 대 1 의존성에 효과적입니다. 1 대 다수, 즉 서비스 A가 서비스 B, C 및 D보다 먼저 시작되도록하려면 다른 접근 방법을 사용해야합니다. 현재 포트 맵 스크립트를 참조 할 수 있지만 다음은 일반적인 접근 방식입니다. 대기 스크립트 작성.
시나리오 : 서비스 A가 항상 서비스 b, 서비스 c 및 서비스 d보다 먼저 실행 되기를 원합니다 .
# service-a-wait
start on (starting service-b
or starting service-c
or starting service-d)
stop on (started service-a or stopped service-a)
# We know that we have more than one job that needs to wait for service-a and
# will make use of this service, so we need to instantiate.
instance $JOB
# Needed to make starting the job successful despite being killed
normal exit 2
task
script
status service-a | grep -q "start/running" && exit 0
start service-a || true
# Waiting forever is ok.. upstart will kill this job when
# the service-a we tried to start above either starts or stops
while sleep 3600 ; do :; done
end script
이것이 일반 영어로 의미하는 것은 : 서비스 b, c 또는 d가 시작하려는 신호를 보낼 때 서비스 -a가 실행될 때까지 시작을 기다려야합니다. 서비스 대기 작업은 서비스가 시작될 때까지 실행되도록 설계되었습니다. service-a-wait가 종료되면 이제 서비스 b, c 및 d를 자유롭게 수행하고 실행할 수 있습니다.
이렇게하면 역방향 종속성이 시작되기 전에 서비스 a가 시작되어 실행됩니다.
참고 : "instance $ JOB"줄은이 "start on ... or .. or .."시나리오에서 중요합니다. 그렇지 않으면 B, C 또는 D 중 어느 것이 먼저 발사되는지 실제로 차단합니다.
(인스턴트 화는 솔직히 더 나은 설명을 할 가치가 있습니다. 지금은 그렇게하십시오.;)
normal exit 2
라인이 normal exit 0 2
대신 되어야 합니까? script
섹션 의 첫 번째 줄은 매우 명확하게 할 수 있습니다 exit 0
.