특정 애플리케이션이 실행 중일 때만 데몬을 실행하는 방법은 무엇입니까?

특정 애플리케이션이 실행 중일 때만 데몬을 실행하는 방법은 무엇입니까?

maxwell다른 응용 프로그램( )의 D 버스 신호를 기반으로 다양한 작업을 수행하는 사용자 공간 데몬( )이 있습니다 room. maxwell사용자가 시작하자마자 실행 room하고 종료 시 중지 하고 싶습니다 room.

나는 이와 같은 실행 프로그램 스크립트가 원하는 동작을 생성할 것이라고 생각합니다.

#!/bin/sh

systemctl --user start maxwell
room
systemctl --user stop maxwell

그러나 예를 들어 systemd 자체를 통해 이를 수행하는 더 나은/표준 방법이 있습니까?

고쳐 쓰다:내가 찾고 있는 기능은 upstart과거에 제공했던 기능과 유사한 것 같습니다.버스 이벤트. systemdStephen Kitt의 답변에 따르면 달성할 수 있는 가장 가까운 것은 특정 D 버스 이름이 처음 사용될 때 불행히도 이 경우 room이름을 "소유"하는 서비스를 자동으로 시작하는 것 같습니다.


노트:내 생각엔 이게 아무 상관도 없는 것 같아systemd에는 "시스템이 아닌 일부 프로세스"가 필요합니까?또는 최소한 거기에 제공된 답변이 이 경우에 작동합니다. 내가 이해한 바에 따르면 을 사용하면 단위가 다음과 같이 표시 ExecStartPre됩니다 .maxwell실패room아직 실행되고 있지 않은 경우 .

답변1

시스템 지원D-버스 활성, D-Bus 메서드 호출을 서비스하는 서비스를 시작합니다. 이것이 사용자 서비스로 이식 가능한지 확실하지 않습니다. 시스템 서비스의 경우 D-Bus 서비스 파일을 만듭니다.

[D-BUS Service]
Name=your.bus.name
Exec=/path/to/the/daemon
User=root
SystemdService=systemd-service-name.service

그리고 일치하는 버스 이름을 지정해야 하는 해당 systemd 서비스:

[Service]
BusName=your.bus.name

지정하다BusName그러면 해당 서비스가 D-Bus 서비스로 자동 표시됩니다.

모든 것을 사용자 서비스로 설치하는 것이 가능해야 하지만( UserD-Bus 서비스 파일을 일치하도록 변경) 아직 시도하지 않았습니다.

관련 정보