Sytemd: SYSTEMD_UNIT_PATH 변수를 설정하는 방법

Sytemd: SYSTEMD_UNIT_PATH 변수를 설정하는 방법

저는 yocto를 기반으로 임베디드 Linux를 개발 중입니다. 시스템은 읽기 전용으로 설치되었으며 systemd를 사용하여 데이터 파티션의 opkg에 의해 설치된 응용 프로그램을 관리하고 싶습니다.

이를 위해 대상을 만들고 default.target 링크를 내 대상을 가리키도록 변경했습니다. 이것은 작동하며 /etc/systemd/system/ 폴더에 설치된 서비스를 실행할 수 있습니다.

다음 단계는 /data/etc/systemd/system/과 같은 폴더에 설치된 서비스를 실행하는 것입니다.

systemd 문서에서 SYSTEMD_UNIT_PATH 변수를 설정하여 systemd가 서비스를 찾는 폴더를 확장할 수 있다는 것을 발견했습니다. 그러나 많은 테스트 후에도 이 변수를 올바르게 설정하는 방법을 찾지 못했고 systemd는 내 서비스를 찾지 못했습니다.

이 문제를 해결하는 데 도움을 주실 수 있나요?

편집: 커널 명령줄에 추가하지 않고 이를 수행할 수 있는 방법이 있다면 완벽할 것입니다.

감사해요.

답변1

AFAIK는 변수 가 처음 나타나는 경우 에만 SYSTEMD_UNIT_PATH변수를 따릅니다.systemd시작systemctl set-environment그러면 나중에 명령을 통해 변경 하더라도 더 이상 그렇지 않습니다 .

또한 이 변수는 실제로 서비스 파일을 찾기 위한 추가 경로를 제공하지 않지만 표준 경로를 완전히 재정의합니다. 즉, systemd해당 환경에 이 변수가 설정된 인스턴스를 시작하면 인스턴스는 일반 경로와 우선순위가 낮은 다른 모든 경로를 systemd무시하고 해당 경로의 서비스 파일만 찾습니다 ./etc/systemd

기술적으로 귀하의 상황에 맞는 몇 가지 또는 세 가지 복잡한(그리고 복잡한) 솔루션이 있을 수 있지만 지금까지 가장 좋고 간단한 솔루션은 배포 공급업체가 했던 것처럼 수행하는 것입니다. 서비스 파일을 첨부합니다. /lib/systemd/경로 안이나 아래에 놓습니다. 기본적으로 경로는 해당 /etc/systemd경로를 반영하며 공급업체가 자신의 경로를 배치할 수 있도록 정확하게 설계되었습니다. systemd유닛 파일. 결국, Yocto 프로젝트의 경우배포판 공급자.

답변2

맨 시스템에서

$SYSTEMD_UNIT_PATH, $SYSTEMD_GENERATOR_PATH, $SYSTEMD_ENVIRONMENT_GENERATOR_PATH systemd가 유닛 파일과 생성기를 찾는 위치를 제어합니다. 이러한 변수에는 콜론(":")으로 구분된 경로 목록이 포함될 수 있습니다. 설정 시 목록이 빈 구성 요소("...:")로 끝나는 경우 목록은 일반적인 경로 집합 앞에 추가됩니다. 그렇지 않으면 지정된 목록이 일반적인 경로 집합을 대체합니다.

따라서 systemd가 시작되기 전에 내보내는 경우 예를 들면 다음과 같습니다.

export SYSTEMD_UNIT_PATH="/mypath:"

/mypath가 앞에 추가되고 여기에 시스템 파일을 저장할 수 있습니다.

관련 정보