Змінна HOME не встановлена


12

У мене є два сервери, вони однакові (я вважаю), сервери виробництва та інсталяції.

І у мене папковий сценарій на початку /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

На сервері постановки він працює добре, але коли я запускаю цей скрипт на виробничому сервері, то змінна HOME порожня, код echo "$HOME/.rbenv"оцінюється на"/.rbenv"

Що може бути тут проблемою? Дякую


Я не знаю першопричини, але чому б не встановити її спочатку, але статично?
jobin

Чому громіздкий скрипт? Схоже, що (так) sh тлумачило б це прекрасно.
Девід Фоерстер

Відповіді:


11

Прочитайте це запитання на сайті stackoverflow.com та відповідь користувача grawityна superuser.com

Ви не повинні використовувати $HOMEв ньому init.d, оскільки незрозуміло, яким користувачу користуватись додому, поки цей користувач не ввійде в систему.

Цитата зі специфікації 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>.

Ви можете використовувати невеликий хак, щоб отримати домашню папку користувача myuserу своєму сценарії

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

Краще скористатися сценарієм нижче, тому що зазвичай можуть бути інші HOME_*папки. Такі як JAVA_HOMEі т.д.

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

8

Здається, що $ HOME інтерпретується ще до того, як він піде на удар? Я б спробував одне з наступних. Або додайте:

env HOME=/home/MyName

до коду відразу після опису.

Або перемістіть код зсередини блоку сценарію в інший файл сценарію за допомогою:

#! /bin/bash

як рядок 1. Тоді мати

exec /path/to/my/script.sh
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.