![Systemd BindsTo - 서비스 충돌 후 다시 시작](https://linux55.com/image/225247/Systemd%20BindsTo%20-%20%EC%84%9C%EB%B9%84%EC%8A%A4%20%EC%B6%A9%EB%8F%8C%20%ED%9B%84%20%EB%8B%A4%EC%8B%9C%20%EC%8B%9C%EC%9E%91.png)
내 시스템에는 여러 시스템 서비스가 있습니다 . 이러한 서비스가 모두 실행되는 한 내 시스템은 "실행 중"으로 간주됩니다 a.service
.z.service
이 상태는 장치 상태 LED 어딘가에 표시되어야 합니다. 이를 위해 나는 system-status.service
다음을 수행하는 다른 시스템 서비스를 사용하는 것을 생각했습니다.
- 모든 서비스가
active
실행 중으로 표시되는 경우 - 서비스가 충돌/중지되면 해당 서비스가 실행되고 있지 않음을 나타냅니다.
이 불완전한 코드 조각을 사용하면 system-status.service
다음 한 가지 경우를 제외하고는 정상적으로 작동합니다.
[Unit]
BindsTo=a.service
BindsTo=b.service
...
After=a.service
After=b.service
...
[Service]
ExecStart=/usr/bin/indicate-running.sh
ExecStop=/usr/bin/indicate-stopped.sh
그러나 a.service
라인이 포함되어 충돌 Restart=always
이 발생 하면 a.service
(시뮬레이션을 통해 kill -9
) a.service
재부팅은 성공하지만 system-status.service
실패합니다!
kill -9 <a.pid>
어떤 아이디어가 있나요? 감사해요!
답변1
필요한 것은 Wants=system-status.service
과 사이의 관계입니다. 이 두 서비스에 대한 재정의를 추가하지 않으려는 경우 설치 섹션에 역관계를 추가해야 합니다.a.service
b.service
system-status.service
...
[Install]
WantedBy=a.service
WantedBy=b.service
이 섹션을 적용하려면 systemctl enable system-status.service
다시 실행해야 합니다.