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
Odpowiedzi:
Przeczytaj to pytanie na stackoverflow.com i tę odpowiedź użytkownika
grawity
na superuser.comNie należy stosować
$HOME
winit.d
, ponieważ nie jest jasne, które użytkownicy domu do użytkowania, dopóki ten użytkownik loguje się.Cytat ze specyfikacji POSIX :
Możesz użyć małego włamania, aby uzyskać folder domowy użytkownika
myuser
w skrypcieLepiej jest użyć skryptu poniżej, ponieważ zwykle mogą istnieć inne
HOME_*
foldery. Takich jakJAVA_HOME
itp.źródło
Wygląda na to, że $ HOME jest interpretowane, zanim zacznie bash? Spróbowałbym jednego z poniższych. Dodaj:
do kodu tuż po opisie.
Lub przenieś kod z bloku skryptu do innego pliku skryptu za pomocą:
jak w linii 1. Następnie
źródło