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.