저는 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/