Zmienna HOME nie jest ustawiona

12

Mam dwa serwery, są identyczne (jak sądzę), serwery produkcyjne i stagingowe.

I mam skrypt startowy w /etc/init/folderze.

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

Na serwerze pomostowym działa dobrze, ale kiedy uruchamiam ten skrypt na serwerze produkcyjnym, wówczas zmienna HOME jest pusta, kod echo "$HOME/.rbenv"ocenia"/.rbenv"

Co może być tutaj problemem? Dzięki

megas
źródło
Nie znam pierwotnej przyczyny, ale dlaczego nie ustawić go najpierw, choć statycznie?
jobin
Dlaczego uciążliwy skrypt bash? Wygląda na to, że (da) sh zinterpretuje to doskonale.
David Foerster,

Odpowiedzi:

11

Przeczytaj to pytanie na stackoverflow.com i tę odpowiedź użytkownika grawityna superuser.com

Nie należy stosować $HOMEw init.d, ponieważ nie jest jasne, które użytkownicy domu do użytkowania, dopóki ten użytkownik loguje się.

Cytat ze specyfikacji 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>.

Możesz użyć małego włamania, aby uzyskać folder domowy użytkownika myuserw skrypcie

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

Lepiej jest użyć skryptu poniżej, ponieważ zwykle mogą istnieć inne HOME_*foldery. Takich jak JAVA_HOMEitp.

su - myuser -c /usr/bin/env | grep "^HOME="
c0rp
źródło
8

Wygląda na to, że $ HOME jest interpretowane, zanim zacznie bash? Spróbowałbym jednego z poniższych. Dodaj:

env HOME=/home/MyName

do kodu tuż po opisie.

Lub przenieś kod z bloku skryptu do innego pliku skryptu za pomocą:

#! /bin/bash

jak w linii 1. Następnie

exec /path/to/my/script.sh
Julian Stirling
źródło