Я установил RVM с помощью user01 в Ubuntu 14.04, и user01 может запустить мое приложение rails, как и ожидалось. Однако я хочу запустить это приложение после запуска системы. Для этого я пытаюсь использовать следующее:
/var/script/start.sh
screen -d -m mongrel_rails start -e production -p 8088
/etc/rc.local (добавлено перед выходом 0)
sh './var/script/start.sh'
Из-за приведенных выше изменений мое приложение rails не запускается. Я могу подтвердить это, потому что нет активного сеанса экрана GNU (команда screen -d -m mongrel_rails ... запускает сеанс экрана и отключается. Я могу увидеть сеанс с помощью команды "screen -ls", но я даже после переключения на root).
Я переключился на root (sudo su) и попытался запустить приложение вручную, но это не удалось:
/ usr / bin / env: ruby: нет такого файла или каталога
Я подумал, что RVM / Ruby не работает для root. Я подтвердил это, запустив «ruby -v», который вернул сообщение, подтверждающее, что приложение не было установлено. Это не тот случай, когда user01 видит информацию об установленной версии ruby.
Я продолжал искать способ обойти это и нашел эта почта который предложил следующую команду для переключения на пользователя при выполнении команды запуска.
su user01 -c '/var/script/start.sh'
Это тоже не помогло, и после расследования я обнаружил, что ruby был сломан для user01, когда я «su user01» в эту учетную запись от root. 'ruby -v' также не вернул ожидаемую информацию. После тестирования вручную я обнаружил, что ввод «exit» вернул меня в root, а другой «exit» вернул меня на user01 (учетная запись, которую я использовал для входа в систему), и ruby правильно работает для этой учетной записи.
Может ли кто-нибудь предложить способ обойти это?
Вы используете rvm, поэтому правильный способ справиться с тем, что рубин не найден, - это использовать обертку rvm (в системах SysVinit и upstart).
Сначала (необязательно) создайте псевдоним для вашего приложения для gemset, который вы хотите использовать:
rvm alias create my_app ruby-2.1.4@my_gemset
Затем создайте нужную оболочку (и):
rvm wrapper my_app mongrel_rails
Обертка создается в $rvm_path/wrappers/my_app
каталог, а затем вы вызываете его из своего сценария инициализации после переключения пользователей.
su user01 -c '/home/user01/.rvm/wrappers/my_app/mongrel_rails -e production -p 8088'
(Обратите внимание, что я полностью удалил screen
отсюда, так как нет особых причин запускать это на экране.)
Если '/var/script/start.sh' работает, когда вы запускаете его под именем user01, тогда ваш сценарий зависит от переменных среды. Чтобы увидеть эти переменные, запустите env. Возможно, что-то не хватает, когда вы пытаетесь запустить его из учетной записи root через su user01 -c.
Я бы посоветовал попробовать использовать специальную опцию '-' с su. На странице руководства:
-, -l, --login
make the shell a login shell, clears all envvars except
for TERM, initializes HOME, SHELL, USER, LOGNAME and PATH
Итак, ваша команда будет выглядеть так:
# su - user01 -c '/var/script/start.sh'
Таким образом, user01 сделает оболочку оболочкой входа в систему, очистит envvars и инициализирует все остальное, как указано на странице руководства.