Переменная HOME не установлена

У меня есть два сервера, они идентичны (я считаю), производственные и промежуточные серверы.

И у меня есть скрипт выскочки в папке /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"

Что может быть проблема здесь? Благодаря

10
задан 18 December 2013 в 01:52

2 ответа

Прочитайте этот вопрос на 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="
0
ответ дан 18 December 2013 в 01:52

Похоже, что $ HOME интерпретируется перед переходом в bash? Я бы попробовал одно из следующего. Либо добавьте:

env HOME=/home/MyName

к коду сразу после описания.

Или переместите код из блока сценария в другой файл сценария с:

#! /bin/bash

в качестве строки 1. Затем введите

exec /path/to/my/script.sh
0
ответ дан 18 December 2013 в 01:52

Другие вопросы по тегам:

Похожие вопросы: