HOME 변수가 설정되지 않았습니다 on runlevel

두 대의 서버가 있습니다. 프로덕션 서버와 준비 서버는 동일합니다.

그리고 /etc/init/폴더에 시작 스크립트가 있습니다.

description "Discoure process"

setuid deploy
setgid deploy

respawn
respawn limit 3 30

start on runlevel [2345]
stop on runlevel [06]

script
exec /bin/bash <<'EOT'
  echo \"$HOME/.rbenv\"

  cd /home/deploy/discourse/current

  bundle exec bluepill load config/discourse.pill --no-privileged --base-dir tmp/bluepill --logfile log/bluepill.log
EOT
end script

준비 서버에서는 잘 작동하지만 프로덕션 서버에서 해당 스크립트를 실행하면 HOME 변수가 비어 있으며 코드 echo "$HOME/.rbenv""/.rbenv"

여기서 문제가 될 수있는 것은 무엇입니까? 감사



답변

stackoverflow.com 에서이 질문을 읽고 superuser.com에서 사용자 가이 답변읽습니다.grawity

당신은 사용하지 말아야 $HOME에서 init.d는이 사용자가 로그인 할 때까지 사용에 대한 사용자의 홈 명확하지 않기 때문에.

POSIX 사양 에서 인용 :

HOME
The system shall initialize this variable at the time of login to be a pathname
of the user's home directory. See <pwd.h>.

당신은 myuser당신의 스크립트 에 사용자의 홈 폴더를 얻기 위해 작은 해킹을 사용할 수 있습니다

su - myuser -c /usr/bin/env | grep HOME

일반적으로 다른 HOME_*폴더 가있을 수 있으므로 아래 스크립트를 사용하는 것이 좋습니다 . 예컨대 JAVA_HOME등등

su - myuser -c /usr/bin/env | grep "^HOME="

답변

bash로 가기 전에 $ HOME이 해석되는 것처럼 보입니까? 다음 중 하나를 시도합니다. 다음을 추가하십시오.

env HOME=/home/MyName

설명 바로 뒤에 코드에.

또는 다음을 사용하여 스크립트 블록 내부에서 다른 스크립트 파일로 코드를 이동하십시오.

#! /bin/bash

1 행으로

exec /path/to/my/script.sh