시스템 동적(런타임) 종속성

시스템 동적(런타임) 종속성

임베디드 장치에는 기본 애플리케이션과 여러 서비스가 있습니다. 주요 애플리케이션과 서비스는 systemd에 의해 관리됩니다.

기본 애플리케이션에는 플러그인 시스템이 있으며 해당 플러그인은 런타임 시 활성화되거나 비활성화될 수 있습니다. 우리가 가지고 있다고 가정 PluginA하십시오 PluginB. 두 플러그인 모두 서비스가 필요합니다. 이를 이라고 부르겠습니다 ServiceP.

이제 플러그인이 하나만 있는 경우 ServiceP로드하는 동안 서비스를 시작하고 언로드하는 동안 서비스를 중지합니다. 하지만 두 개의 플러그인이 있고 수명 주기가 겹칠 수 있으므로 동적 종속성 또는 참조 카운터가 필요합니다.

PluginA loaded   --> start ServiceP
PluginB loaded   --> do nothing (already started by PluginA)
PluginA unloaded --> do nothing (still required by PluginB)
PluginB unloaded --> stop ServiceP

systemd를 사용하여 이를 수행할 수 있는 방법이 있습니까?

나는 그렇게 생각하지 않습니다. 왜냐하면 systemd가 전체 애플리케이션을 관리하기 때문입니다. 따라서 참조 카운터를 직접 구현하면 다음과 같은 결과를 얻을 수 있습니다.

# case 1
App starts (don't start ServiceP, app didn't request it yet)
App says it needs ServiceP --> start ServiceP
App says it no longer needs ServiceP --> stop ServiceP

# case 2
App says it needs ServiceP --> start ServiceP
App stops/crashes --> stop ServiceP
...

유닛 파일에 종속성을 추가/제거하고 다시 로드하면 쉽게 달성할 수 있다고 생각합니다. 하지만 App충돌이 발생해도 멈추지 않으므로 ServiceP에서 정리를 수행해야 합니다 ExecStopPost=. 이는 systemctl daemon-reload유닛 파일에서 호출하는 것을 의미하는데 이는 올바르지 않은 것 같습니다. 더 나은 해결책이 있습니까?

관련 정보