org.freedesktop.systemd1 아래의 systemd dbus 서비스가 유닛 템플릿을 관리할 수 있습니까?

org.freedesktop.systemd1 아래의 systemd dbus 서비스가 유닛 템플릿을 관리할 수 있습니까?

저는 일부 셀 템플릿의 많은 인스턴스를 관리하는 프로그램을 작성 중입니다. 내 계획은 이를 위해 systemd의 dbus 서비스를 사용하는 것입니다. 하지만 분명히 org.freedesktop.systemd1.Manager의 인터페이스는 이미 로드된 유닛이나 유닛만 관리할 수 있습니다.문서.

유닛 파일을 사용하는 방법은 템플릿 인스턴스를 활성화하거나 시작하는 데 작동하지 않습니다. 왜냐하면 정확히 일치하는 이름을 가진 유닛 파일이 없는 유닛 이름에서는 작동하지 않고 일치하는 인스턴스에 해당하는 템플릿을 찾을 수 없기 때문입니다.

로드된 유닛에서 작동하는 메서드에서는 정확한 이름을 가진 유닛이 로드되어야 하지만, 유닛이 아직 인스턴스화되지 않았기 때문에 그렇지 않습니다.

또한 인터페이스 문서에는 실제로 템플릿에 대한 내용이 나와 있지 않습니다. 이 인터페이스는 systemctl명령만큼 강력 해야 하지 않나요 ?

인터페이스에 대해 제가 뭔가를 놓치고 있는 걸까요? 아니면 아직 찾지 못한 템플릿용 인터페이스가 또 있나요? 아니면 systemd로 이런 일을 할 수 있는 방법이 없나요?

답변1

dbus의 systemd 서비스는 템플릿 단위 파일에서 시작된 서비스를 완벽하게 관리할 수 있습니다. 따라서 템플릿 단위 파일 [email protected]과 구체적인 이름을 가진 인스턴스가 있다고 가정하고 [email protected]단위를 시작해야 합니다.

dbus-send --system --print-reply  --dest=org.freedesktop.systemd1  /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager.StartUnit  string:'[email protected]' string:'replace'

메소드를 통해 아직 수행되지 않은 경우 장치를 활성화할 수도 있습니다 org.freedesktop.systemd1.Manager.EnableUnitFiles.

셀 개체 경로에 대한 다른 작업의 경우 이름을 dbus 유효한 이름으로 변환해야 합니다 [email protected]. /org/freedesktop/systemd1/unit/foo_40bar_2eservice

  • @다음과 같이 번역됨_40
  • .다음과 같이 번역됨_2e
  • _다음과 같이 번역됨_5f
  • -다음과 같이 번역됨_2d

하지만 이 번역의 전체 목록을 어디서 얻을 수 있는지 잘 모르겠습니다.

예를 들어 유닛과 상호작용하여 속성을 얻을 수 있습니다.

dbus-send --system --print-reply  --dest=org.freedesktop.systemd1  /org/freedesktop/systemd1/unit/foo_40bar_2eservice org.freedesktop.DBus.Properties.Get string:'org.freedesktop.systemd1.Service' string:'MainPID'

관련 정보