La variabile HOME non è impostata


12

Ho due server, sono identici (credo), server di produzione e di gestione temporanea.

E ho upstart script nella /etc/init/cartella.

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

Sul server di gestione temporanea funziona bene, ma quando eseguo quello script sul server di produzione, la variabile HOME è vuota, il codice echo "$HOME/.rbenv"sta valutando"/.rbenv"

Quale potrebbe essere un problema qui? Grazie


Non conosco la causa principale, ma perché non impostarla prima staticamente, però?
jobin

Perché la ingombrante sceneggiatura di Bash? Sembra che (da) sh lo interpreterebbe perfettamente bene.
David Foerster,

Risposte:


11

Leggi questa domanda su stackoverflow.com e questa risposta dell'utente grawitysu superuser.com

Non utilizzare $HOMEin init.d, poiché non è chiaro quali utenti home utilizzare, fino a quando l'utente non accede.

Citazione dalle specifiche 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>.

Puoi usare un piccolo hack per ottenere la cartella home dell'utente myusernel tuo script

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

È meglio usare lo script qui sotto, perché di solito ci possono essere altre HOME_*cartelle. Come JAVA_HOMEecc.

su - myuser -c /usr/bin/env | grep "^HOME="

8

Sembra che $ HOME venga interpretato prima che vada a bash? Vorrei provare uno dei seguenti. O aggiungi:

env HOME=/home/MyName

al codice subito dopo la descrizione.

Oppure sposta il codice dall'interno del blocco di script in un altro file di script con:

#! /bin/bash

come linea 1. Quindi avere

exec /path/to/my/script.sh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.