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.