La variable HOME no está configurada


12

Tengo dos servidores, son idénticos (creo), servidores de producción y preparación.

Y tengo un script de inicio en la /etc/init/carpeta.

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

En el servidor provisional funciona bien, pero cuando estoy ejecutando ese script en el servidor de producción, la variable HOME está vacía, el código se echo "$HOME/.rbenv"está evaluando para"/.rbenv"

¿Cuál podría ser un problema aquí? Gracias


No sé la causa raíz, pero ¿por qué no establecerla primero, estáticamente?
trabajoen

¿Por qué la incómoda secuencia de comandos bash? Parece que (da) sh lo interpretaría perfectamente bien.
David Foerster

Respuestas:


11

Lea esta pregunta en stackoverflow.com y esta respuesta del usuario grawityen superuser.com

Usted no debe usar $HOMEen init.d, porque no está claro qué usuarios el hogar de uso, hasta que este usuario abre una sesión.

Cita de la especificación 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>.

Puede usar little hack, para obtener la carpeta de inicio del usuario myuseren su script

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

Es mejor usar el script a continuación, porque generalmente puede haber otras HOME_*carpetas. Tales como JAVA_HOMEetc.

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

8

¿Parece que $ HOME se está interpretando antes de ir a bash? Intentaría uno de los siguientes. O agrega:

env HOME=/home/MyName

al código justo después de la descripción.

O mueva el código desde el interior del bloque de script a otro archivo de script con:

#! /bin/bash

como línea 1. Luego tenga

exec /path/to/my/script.sh
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.