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


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.