Linux 서비스로서의 Bash 스크립트는 실행되지 않지만 터미널에서 실행되면 완벽하게 작동합니다.

Linux 서비스로서의 Bash 스크립트는 실행되지 않지만 터미널에서 실행되면 완벽하게 작동합니다.

Google 드라이브를 마운트하는 사용자 정의 스크립트가 있습니다.
이 스크립트의 일부는 다음 코드입니다.

if [ ! "$(which google-drive-ocamlfuse)" ]
then
    echo "Install google-drive-ocamlfuse first!"
    exit 1
fi

터미널에서 실행되며 매력처럼 작동합니다.
그래서 서비스로 구성했습니다.

[Unit]
Description=Mount and umount google drives

[Service]
User=<usernamehere>
Type=oneshot
RemainAfterExit=true
ExecStart=/home/<usernamehere>/mybscripts/gdrivemounter.sh -m
ExecStop=/home/<usernamehere>/mybscripts/gdrivemounter.sh -u
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/<usernamehere>/.Xauthority"

[Install]
WantedBy=graphical.target

안타깝게도 'google-drive-ocamlfuse를 먼저 설치하세요!'라는 종료 코드가 표시됩니다. 서비스 상태를 확인할 때.

명령어느 google-drive-ocamlfuse사용자 및 루트에서 유효한 경로를 제공합니다.

$ which google-drive-ocamlfuse
/home/<usernamehere>/.opam/default/bin/google-drive-ocamlfuse

문제는 어디에 있습니까?

답변1

문제는 스크립트가 서비스로 실행될 때 "귀하"로 실행되지 않는다는 것입니다. 즉, 귀하의 환경이 없습니다. 특히 변수가 없습니다 PATH.

/home/<usernamehere>/.opam/default/bin스크립트의 PATH에 추가하거나 해당 프로그램의 전체 경로를 하드코딩하면 됩니다.

답변2

가장 가능성이 높은 이유는 포함된 디렉토리가 로그인 셸 google-drive-ocamlfuse에 있지만 에서 사용하는 PATH표준에는 없기 때문입니다 .PATHsystemd

스크립트 시작 부분에 다음과 같은 줄을 추가하면 됩니다.

PATH=$PATH:/path/to/google-drive-ocamlfuse

답변3

솔루션을 제공해 주셔서 감사합니다. 각각은 나에게 중요하고 도움이 됩니다. 다시 한 번 새로운 것을 배웠습니다. 결국 나는 opam을 통해 대신 deb에서 google-drive-ocamlfuse를 설치하기로 결정했습니다. 모든 사용자가 사용할 수 있는 경로에 gdo를 설치하는 것이 좋습니다. 이로 인해 $PATH의 추가 구성이 필요하지 않습니다.

답변4

메모:나는 이 답변을 '있는 그대로' 두었지만 관련된 유일한 부분은 스크립트에서 직접가 아닌 서비스 파일을 통해 환경을 설정하는 방법입니다. 스크립트 실행이 완료된 후에는 스크립트에서 새 $PATH 설정이 유지되지 않습니다.

$PATH다른 답변과 관련하여 실제로 올바른 사용자가 실행하면 작동하는 스크립트를 편집하여 오염시키지 마십시오 . 스크립트에서 직접 편집해야 하는 경우 원본 $PATH.

문제는 /etc/profile이 시스템 서비스에 의해 처리되지 않아서 어떤 이유로든 필요한 실행 파일에 대한 액세스(또는 업데이트된 $PATH)를 얻지 못했다는 사실에 있다고 생각합니다.

이를 테스트하려면 오류 블록 내에서 $PATH를 출력할 수 있으며, 누락된 경우 systemd 서비스 파일 내의 환경 변수에 직접 추가할 수 있습니다.

[Service]
Environment=PATH=/home/someUser/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

이렇게 하면 스크립트가 실행되는 동안에만 경로가 업데이트되고, 수정될 것으로 예상하지 않는 사용자에 대해서는 경로가 수정되지 않습니다.

관련 정보