Ich habe zwei Server, sie sind identisch (glaube ich), Produktions- und Staging-Server.
Und ich habe ein Startskript im /etc/init/
Ordner.
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
Auf dem Staging-Server funktioniert es gut, aber wenn ich dieses Skript auf dem Produktionsserver ausführe, echo "$HOME/.rbenv"
ist die HOME-Variable leer, und der Code wird ausgewertet"/.rbenv"
Was könnte hier ein Problem sein? Vielen Dank
Antworten:
Lesen Sie diese Frage auf stackoverflow.com und diese Antwort des Benutzers
grawity
auf superuser.comSie sollten verwenden nicht
$HOME
ininit.d
, weil es nicht klar , welche Benutzer zu Hause verwendet wird, bis dieser Benutzer anmeldet.Zitat aus der POSIX-Spezifikation :
Sie können einen kleinen Hack verwenden, um den Home-Ordner des Benutzers
myuser
in Ihrem Skript abzurufenEs ist besser, das folgende Skript zu verwenden, da es normalerweise andere
HOME_*
Ordner geben kann . WieJAVA_HOME
etc.quelle
Scheint, als würde das $ HOME interpretiert, bevor es zur Bash geht? Ich würde eines der folgenden versuchen. Entweder hinzufügen:
zum Code direkt nach der Beschreibung.
Oder verschieben Sie den Code aus dem Skriptblock in eine andere Skriptdatei mit:
als Zeile 1. Dann haben
quelle