systemd exec 명령에서 $(logname)을 얻는 방법은 무엇입니까?

systemd exec 명령에서 $(logname)을 얻는 방법은 무엇입니까?

저는 systemd 서비스( /etc/systemd/system/name.service)를 작성 중입니다. 서비스 실행은 에 배치합니다 . 명령 내부에서는 사용할 ~/folder/script.sh수 없어서 사용 하지만 작동하지 않습니다.~/ExecStart/home/$(logname)/folder/script.sh

답변1

Systemd는 쉘 환경보다 낮은 수준에서 실행됩니다. 내 말은 명령을 실행할 때 일반적으로 init 데몬(이 경우 systemd)의 하위 프로세스인 셸 환경의 하위 프로세스라는 것입니다. 이는 systemd 장치가 쉘 환경을 보거나 따르지 않으며 ~파일에 구성된 환경 변수(예: . ~/.profile또는 ) 가 ~/.bashrc적용되지 않음을 의미합니다. 무엇을 볼 것인가하다적용 명령을 입력할 수 있습니다 systemctl show-environment. 내 시스템(Ubuntu Server 및 Arch)에서 이는 PATH및 입니다 LANG. 추가 정보여기.

이것은 사용자 단위에 대해 모두 사실입니다... 그러나 systemd는 에서와 같이 사용자 단위에 대해 약간 더 강력한 환경을 유지합니다 systemctl show-environment --user. 마지막 명령을 실행했다면 수행해야 할 작업을 제공해야 합니다. Systemd(적어도 내 시스템에서는)는 환경 변수를 USER장치를 실행하는 사용자의 사용자 이름으로 설정합니다. 따라서 ExecStart 줄을 /home/${USER}/folder/script.sh. 또한 systemd 매뉴얼 페이지에 따르면 (& ...를 사용하지 않는다는 점에 유의하세요 . 이는 필요하지 않습니다. 아주 이상한 이유로 사용자 이름에 공백이 있을 경우를 대비해 )중괄호( {& )가 있습니다. 사용자의 홈 디렉토리가 거기에 없더라도 }마찬가지입니다 .${HOME}/folder/script.sh/home/

관련 정보