A variável HOME não está definida

10

Eu tenho dois servidores, eles são idênticos (acredito), servidores de produção e de estágio.

E eu tenho o script upstart na pasta /etc/init/ .

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

No servidor intermediário, ele funciona bem, mas quando estou executando esse script no servidor de produção, a variável HOME está vazia, o código echo "$HOME/.rbenv" está avaliando para "/.rbenv"

O que pode ser um problema aqui? Obrigado

    
por megas 17.12.2013 / 22:52

2 respostas

10

Leia este pergunta em stackoverflow.com e esta resposta pelo usuário grawity em superuser.com

Você não deve usar $HOME em init.d , porque não está claro qual usuário usar em casa, até que este usuário faça o login.

Citação da especificação 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>.

Você pode usar um pequeno hack, para obter a pasta home do usuário myuser no seu script

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

É melhor usar o script abaixo, porque geralmente pode haver outras pastas HOME_* . Como JAVA_HOME etc.

su - myuser -c /usr/bin/env | grep "^HOME="
    
por c0rp 22.12.2013 / 15:17
8

Parece que o $ HOME está sendo interpretado antes de ser lançado? Eu tentaria um dos seguintes. Adicione:

env HOME=/home/MyName

para o código logo após a descrição.

Ou mova o código de dentro do bloco de script para outro arquivo de script com:

#! /bin/bash

como linha 1. Então tenha

exec /path/to/my/script.sh
    
por Julian Stirling 20.12.2013 / 09:18