HOME değişkeni ayarlanmadı


12

İki sunucum var, bunlar aynı (inanıyorum), üretim ve hazırlama sunucuları.

Ve /etc/init/klasörde uptart betiğim var .

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

Evreleme sunucusunda iyi çalışıyor, ama üretim sunucusunda o senaryoyu koşturup dururken ardından ANA değişken kod, boş echo "$HOME/.rbenv"için değerlendirdiğini"/.rbenv"

Burada sorun ne olabilir? Teşekkürler


Temel nedeni bilmiyorum, ama neden ilk olarak statik olarak ayarlamıyorsunuz?
jobin

Neden hantal bash betiği? Görünüşe göre (da) sh mükemmel bir şekilde yorumlayacaktır.
David Foerster

Yanıtlar:


11

Stackoverflow.com'daki bu soruyu ve superuser.com'daki kullanıcı tarafından bu yanıtı okuyungrawity

Sen kullanmamalısınız $HOMEiçinde init.diçeri Bu kullanıcının günlükleri kadar kullanımına kullanıcıların ev açık değildir, çünkü.

POSIX spesifikasyonundan alıntı :

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>.

myuserSenaryonuzda kullanıcının ana klasörünü almak için küçük kesmek kullanabilirsiniz

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

Aşağıdaki komut dosyasını kullanmak daha iyidir, çünkü genellikle başka HOME_*klasörler olabilir. Gibi JAVA_HOMEvb.

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

8

$ HOME bash gitmeden önce yorumlanıyor gibi görünüyor? Aşağıdakilerden birini denerdim. Aşağıdakilerden birini ekleyin:

env HOME=/home/MyName

açıklamadan hemen sonra koda.

Veya kodu komut dosyası bloğunun içinden başka bir komut dosyasına taşıyın:

#! /bin/bash

1. çizgi olarak

exec /path/to/my/script.sh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.