여러 시스템 장치가 중지되면 시스템 종료

여러 시스템 장치가 중지되면 시스템 종료

특정 시스템 장치 목록이 중지되면 컴퓨터를 종료하려고 합니다.

배경은 Google Cloud와 AWS EC2에 컴퓨팅 팜이 있고 각 인스턴스가 많은 작업을 수행한 다음 완료되면 종료되는 여러 서비스를 시작한다는 것입니다. 이는 클라우드 인스턴스이고 비용이 많이 들기 때문에 더 이상 작업을 수행하지 않으면 인스턴스를 종료해야 합니다.

내가 본 대부분의 제안은 ExecStopPost=/sbin/init 0시스템 단위 파일(또는 이와 유사한)에 배치하는 것과 관련이 있습니다. 하지만 인스턴스를 닫을 수는 없습니다.모두이 단위는 완료되었습니다. 개별 작업 단위가 포함된 셀을 만든 target다음 StopWhenUnneeded=true모든 작업 단위가 중지되면 대상도 중지되도록 셀을 넣는 것은 쉽습니다 . 하지만 이를 사용하여 시스템 종료를 트리거하는 방법은 없습니다(예: 호출 systemd-halt.service).

따라서 질문은 다음과 같습니다. 장치 목록이나 대상 장치가 중지된 후 시스템을 종료하려면 어떻게 해야 합니까?

답변1

몇 가지 실험 끝에 제가 생각해낸 실행 가능하고 완전히 추악하지는 않은 해결책은 target래퍼 장치를 사용하는 아이디어였지만 service종료 시 시스템을 종료하는 방법을 사용하는 것이었습니다.

예를 들어 작업자 서비스는 다음과 같습니다.

# [email protected]
[Unit]
BindsTo=master.service
After=master.service

[Service]
ExecStart=/bin/myworker

[Install]
WantedBy=master.service

그런 다음 래퍼의 경우:

# master.service
[Unit]
StopWhenUnneeded=true

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/sbin/init 0

systemctl start master.service그런 다음 모든 작업자를 시작할 수 있으며 ( systemctl enable처리 후) 모두 종료되면 master.service중지하고 실행합니다 init 0.
systemctl stop master.service작업자에게도 중지 신호가 제공되지만 실행되기 전에 대기하게 됩니다 init 0.

추악한 부분은 /bin/true. 중지 시 시스템을 종료시키는 기존 시스템 장치가 있으면 더 좋지만 적어도 작동할 수는 있습니다.

관련 정보