>  기사  >  백엔드 개발  >  dbus/systemd를 systemd 장치의 종속성으로 설정하는 방법

dbus/systemd를 systemd 장치의 종속성으로 설정하는 방법

PHPz
PHPz앞으로
2024-02-12 09:10:21780검색

如何将 dbus/systemd 设置为 systemd 单元中的依赖项

php 편집기 Xiaoxin이 DBus/Systemd를 Systemd 장치의 종속성으로 설정하는 방법을 소개합니다. DBus와 Systemd는 Linux 운영 체제에서 일반적으로 사용되는 두 가지 도구입니다. DBus는 프로세스 간 통신에 사용되는 반면 Systemd는 시스템 초기화 및 프로세스 관리를 담당합니다. DBus와 Systemd를 결합하면 보다 효율적인 시스템 관리 및 리소스 예약을 달성할 수 있습니다. 이 문서에서는 이 두 도구의 사용을 더 잘 이해하고 적용하는 데 도움이 되도록 Systemd 장치에서 DBus를 종속성으로 구성하는 방법을 자세히 설명합니다.

질문 내용

go-systemd 라이브러리를 사용하여 dbus를 통해 systemd와 상호 작용하는 go로 작성된 작은 프로그램이 있습니다.

프로그램 자체는 시스템 단위로 등록되어 부팅 시 시작되어야 합니다. 프로그램이 실행 중일 때 여러 장치의 시스템 장치 상태가 정기적으로 쿼리됩니다.

이제 프로그램을 수동으로 시작하면 모든 것이 정상입니다. 그러나 재부팅 후 systemd가 시작되면 "정지"됩니다. 즉, dbus를 통해 systemd 장치 상태를 쿼리할 수 없습니다. go-systemd 도서관으로부터 다음 메시지를 받게 됩니다:

으아악

이제 프로그램을 다시 시작하면 오류 없이 시스템 단위를 즉시 쿼리할 수 있습니다. 이로 인해 내 프로그램에 결함이 있거나 잘못 구성된 종속성이 있어 시작 시 경쟁 조건이 발생하여 프로그램이 dbus를 통해 systemd와 통신할 수 없다고 가정하게 됩니다.

이제 이것을 몇 가지 다른 조합과 함께 사용했지만 도움이 되지 않습니다.

으아악

재부팅 후 바로 dbus를 통해 systemd와 통신할 수 있도록 자체 systemd 장치(go 프로그램)를 구성하려면 어떻게 해야 합니까? 어떤 종속성을 구성해야 합니까?

해결 방법

수동으로 실행할 때 제대로 작동한다고 말씀하셨기 때문에 프로그램이 기본적으로 DBus 세션 버스에 연결을 시도하는 것 같습니다. 응용 프로그램이 Systemd에서 시작되면 기본적으로 루트로 실행되며 연결할 세션 버스가 없으므로 실패합니다.

사용자가 그래픽 터미널에 로그인하면 세션 버스는 일반적으로 로그인별로 시작됩니다. 터미널에서 로그인하면 기본적으로 시작되지 않습니다.

이 경우 현재 두 가지 옵션이 있습니다.

  1. 세션 버스 대신 시스템 버스를 사용하세요.
  2. 세션 버스, 시스템 버스와는 다른 나만의 연결된 버스를 만들어보세요. 가장 쉬운 방법은 dbus-launch를 사용하여 애플리케이션이 연결할 수 있는 새 버스를 만드는 것입니다.

위 내용은 dbus/systemd를 systemd 장치의 종속성으로 설정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제