J'ai deux serveurs, ils sont identiques (je crois), des serveurs de production et de transfert.
Et j'ai un script parvenu dans le /etc/init/
dossier.
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
Sur le serveur intermédiaire, cela fonctionne bien, mais lorsque j'exécute ce script sur le serveur de production, la variable HOME est vide, le code echo "$HOME/.rbenv"
est évalué en"/.rbenv"
Quel pourrait être un problème ici? Merci
Réponses:
Lisez cette question sur stackoverflow.com et cette réponse par utilisateur
grawity
sur superuser.comVous ne devez pas l'utiliser
$HOME
dansinit.d
, car il n'est pas clair quels utilisateurs utilisent à la maison, jusqu'à ce que cet utilisateur se connecte.Citation de la spécification POSIX :
Vous pouvez utiliser un petit hack, pour obtenir le dossier personnel de l'utilisateur
myuser
dans votre scriptIl est préférable d'utiliser le script ci-dessous, car il peut généralement y avoir d'autres
HOME_*
dossiers. Tels queJAVA_HOME
etc.la source
On dirait que $ HOME est interprété avant de passer à bash? J'essaierais l'un des suivants. Soit ajoutez:
au code juste après la description.
Ou déplacez le code de l'intérieur du bloc de script vers un autre fichier de script avec:
comme ligne 1. Ensuite,
la source