A variável HOME não está definida


12

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

E eu tenho um script inicial na /etc/init/pasta.

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 fica vazia, o código echo "$HOME/.rbenv"está sendo avaliado como"/.rbenv"

O que pode ser um problema aqui? obrigado


Não sei a causa raiz, mas por que não defini-la primeiro, estaticamente?
Jobin

Por que o pesado script bash? Parece que (da) sh interpretaria perfeitamente bem.
David Foerster

Respostas:


11

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

Você não deve usar $HOMEem init.d, porque não está claro quais usuários casa para uso, até que este usuário efetua 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 pouco truque, para obter a pasta inicial do usuário myuserem seu script

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

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

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

8

Parece que o $ HOME está sendo interpretado antes de ir para o bash? 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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.