서비스에서 systemd stop 명령을 동기화하는 방법은 무엇입니까?

서비스에서 systemd stop 명령을 동기화하는 방법은 무엇입니까?

a.service수정할 수 없는 것과 수정할 수 있는 것이 있다고 가정해 보겠습니다 b.service. 다음 정지 명령을 보고 싶습니다.

Stopping b.service ...
Stopped b.service
Stopping a.service ...
Stopped a.service

대신에:

Stopping b.service ...
Stopping a.service ...
Stopped b.service
Stopped a.service

b.service이 작업을 완료하는 데 최소 20초가 걸릴 것이라고 가정 해 보겠습니다 .

답변1

b.service일찍 멈추려 면 a.service실제로 주문해야합니다b.service 뒤쪽에 a.service, 서비스가 중지되는 순서가 시작되는 순서와 반대이기 때문입니다.

따라서 이것은 설명하는 내용을 달성하기에 충분해야 합니다.

# b. 서비스 단위 파일
[단위]
설명 =...
이후=a.service

[제공하다]
...

보다After=선적 서류 비치man systemd.unit, 이는 다음과 같습니다.

순차 종속성을 갖는 두 장치가 종료되면 시작 순서가 반대가 됩니다. 즉, 한 장치가 다른 장치 위에 구성된 경우 After=두 장치가 모두 종료되면 전자가 후자보다 먼저 중지됩니다.

b.service또한 종료하는 데 최소 20초가 걸리면 어떻게 되는지 질문하셨습니다 . 괜찮아요. 올바르게 구성된 경우 b.servicesystemd는 장치가 완료를 중지할 때까지(즉, ExecStop=어떤 방식으로 잘못 구성되지 않은 경우), 시간 초과에 도달하기 전에 중지할 때까지 이를 모니터링할 수 있습니다(참조TimeoutStopSec=b.service), 그러면 systemd는 종료를 초기화하기 전에 완전히 멈출 때까지 기다립니다 a.service.

답변2

systemctl주어진 순서대로 이러한 작업을 중지하려면 다음과 같이 호출할 수 있습니다.

 $ systemctl stop a.service && systemctl stop b.service

또는

 $ systemctl stop a.service; systemctl stop b.service

관련 정보