systemd $HOME 환경 변수가 예상과 다릅니다.

systemd $HOME 환경 변수가 예상과 다릅니다.

루트로 실행되는 서비스가 있습니다.

[Unit]
Description=my service
After=docker.service network-online.target
Requires=docker.service network-online.target

[Service]
TimeoutStartSec=0
RestartSec=60
Restart=always
User=root
Group=root

ExecStart=/usr/bin/myservice

[Install]
WantedBy=multi-user.target

예상치 못한 동작이 발생했습니다.

장애를 일으키는 환경변수를 살펴보니 $HOME해당 환경변수가 ./rootmyservice

그러나 루트로서 다음을 얻습니다.

$ echo $HOME
/home/root

이건 내가 본 것과 일치한다/etc/passwd

root:x:0:0:root:/home/root:/bin/sh

수동으로 실행 하면 myservice올바른 $HOME환경 변수가 얻어지고 작동합니다.

나는 $HOME되고 싶지만 /home/root그렇지 않다 /root. 그래서...

  1. 어디서 systemd가져오며 /root왜 덮어쓰나요 $HOME?
  2. systemd$HOME서비스 파일에서 환경 변수를 명시적으로 설정하는 것 외에 이것이 전역적으로 수행되는 것을 방지하려면 어떻게 해야 합니까 ? <-- 소스코드를 살펴보니 별 영향은 없는 것 같습니다.

답변1

소스 코드를 확인한 후 디렉토리가 systemd실제로 사용자 home를 위해 root하드코딩 되어 있음을 발견했습니다. 이 설정을 변경하는 구성 문서를 찾지 못했기 때문에 기본 홈 디렉터리를 사용하는 Yocto 프로젝트에 대해 알아야 할 사항입니다.

/root하드코딩된 값을 in으로 수정하여 /home/root이를 확인했습니다 .https://github.com/systemd/systemd/blob/main/src/basic/user-util.csystemd수정된 서비스가 올바른 변수로 생성되고 있음 을 관찰했습니다 $HOME.

지금까지는 기호 링크가 좋은 해결 방법 /root이었습니다 . /home/root기본값을 ROOT_HOME다음으로 전환하는 것은 /root나쁜 생각이 아닐 수도 있습니다.나머지 Linux 세계와 보조를 맞추세요.

관련 정보