У меня есть два сервера, они идентичны (я считаю), производственный и промежуточный серверы.
И у меня есть сценарий выскочки в /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"
В чем может быть проблема здесь? Спасибо
Ответы:
Прочитайте этот вопрос на stackoverflow.com и этот ответ пользователя
grawity
на superuser.comВы не должны использовать
$HOME
ininit.d
, потому что не ясно, какие пользователи дома использовать, пока этот пользователь не войдет в систему.Цитата из спецификации POSIX :
Вы можете использовать небольшой взлом, чтобы получить домашнюю папку пользователя
myuser
в вашем скриптеСценарий лучше использовать ниже, потому что обычно могут быть другие
HOME_*
папки. Такие какJAVA_HOME
и т. Д.источник
Похоже, что $ HOME интерпретируется перед тем, как перейти к bash? Я бы попробовал одно из следующего. Либо добавьте:
к коду сразу после описания.
Или переместите код из блока скриптов в другой файл скрипта с помощью:
как строка 1. Тогда есть
источник