Q:

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

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

A:

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:
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>.

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="

A:

Seems like the $HOME is being interpreted before it goes to bash? I would try one of the following. Either add:
env HOME=/home/MyName

to the code just after the description.
Or move the code from inside the script block to another script file with:
#! /bin/bash

as line 1. Then have
exec /path/to/my/script.sh

