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
Read this question on stackoverflow.com and this answer by user
grawity
on superuser.comYou should not use
$HOME
ininit.d
, because it is not clear which users home to use, until this user logs in.Quote from POSIX specification:
You can use little hack, to get home folder of user
myuser
in your scriptIt is better to use script below, because usually there can be other
HOME_*
folders. Such asJAVA_HOME
etc.Seems like the $HOME is being interpreted before it goes to bash? I would try one of the following. Either add:
to the code just after the description.
Or move the code from inside the script block to another script file with:
as line 1. Then have
If all you need is the
HOME
variable to be set (which solved my problem), you can explicitly set it with theenv
directive:via https://askubuntu.com/a/1125244/160358