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)의 하위 프로세스인 셸 환경의 하위 프로세스입니다. 이는 시스템 장치가 쉘 환경이나 ~. ~/.profile또는 같은 파일에 구성된 환경 변수는 ~/.bashrc적용되지 않습니다. 뭐를 보려고하다적용하려면 명령을 입력하면 됩니다 systemctl show-environment. 내 시스템(Ubuntu Server 및 Arch)에서는 PATHLANG. 더 많은 정보여기.

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

관련 정보