Ubuntu – HOME variable is not set


I have two servers, they're identical (I believe), production and staging servers.

And I have upstart script in /etc/init/ folder.

description "Discoure process"

setuid deploy
setgid deploy

respawn limit 3 30

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

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
end script

On the staging server it works well, but when I'm running that script on production server then the HOME variable is empty, the code echo "$HOME/.rbenv" is evaluating to "/.rbenv"

What might be a problem here? Thanks

Best Answer

Read this question on stackoverflow.com and this answer by user grawity on superuser.com

You should not use $HOME in init.d, because it is not clear which users home to use, until this user logs in.

Quote from POSIX specification:

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

You can use little hack, to get home folder of user myuser in your script

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

It is better to use script below, because usually there can be other HOME_* folders. Such as JAVA_HOME etc.

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