Я пытаюсь запустить сервер-единорог при загрузке сервера. Я создал сценарий оболочки, который работает, если я захожу как пользователь ubuntu и запускаю
/etc/init.d/unicorn start
Сценарий оболочки
#!/bin/sh
case "$1" in
start)
cd /home/ubuntu/projects/asbest/current/
unicorn_rails -c /home/ubuntu/projects/asbest/current/config/unicorn.rb -D -E production
;;
stop)
if ps aux | awk '{print $2 }' | grep `cat ~/projects/asbest/current/tmp/pids/unicorn.pid`> /dev/null; then kill `cat ~/projects/asbest/current/tmp/pids/uni$
;;
restart)
$0 stop
$0 start
;;
esac
Когда я перезагрузил сервер, я заметил, что сервер-единорог не слушает сокет. Поскольку я успешно выполнил код как пользователь ubuntu, я изменил скрипт, чтобы он всегда использовал пользователя ubuntu через sudo.
#!/bin/sh
case "$1" in
start)
cd /home/ubuntu/projects/asbest/current/
sudo -u ubuntu unicorn_rails -c /home/ubuntu/projects/asbest/current/config/unicorn.rb -D -E production
;;
stop)
if ps aux | awk '{print $2 }' | grep `cat ~/projects/asbest/current/tmp/pids/unicorn.pid`> /dev/null; then sudo -u ubuntu kill `cat ~/projects/asbest/current/tmp/pids/uni$
;;
restart)
$0 stop
$0 start
;;
esac
После перезагрузки единорог по-прежнему не запускался, поэтому я попытался запустить скрипт из командной строки. Теперь я получаю следующую ошибку
sudo: unicorn_rails: command not found
Я тщательно искал, что могло вызвать это, но, боюсь, я использовал свое ограниченное понимание Linux. Насколько я понимаю, хотя sudo должен использовать пользователя ubuntu для выполнения команд, он по-прежнему использует среду пользователя root, которая не настроена для запуска ruby или unicorn. У кого-нибудь есть опыт в этом?
Использовать глобальные вары UNICORN_*
как это:
UNICORN_HOME=/the/path
UNICORN_RAIL=${UNICORN_HOME}/unicorn_rail
UNICORN_CONFIG=${UNICORN_HOME}/config/unicorn.rb
UNICORN_PID=${UNICORN_HOME}/tmp/pids/unicorn.pid
UNICORN_USER=ubuntu
sudo -u ${UNICORN_USER} ${UNICORN_RAIL} -c $UNICORN_CONFIG -D -E production
Еще один хороший способ - извлечь глобальные переменные в /etc/default/unicorn
:
UNICORN_HOME=/the/path
UNICORN_RAIL=${UNICORN_HOME}/unicorn_rail
UNICORN_CONFIG=${UNICORN_HOME}/config/unicorn.rb
UNICORN_PID=${UNICORN_HOME}/tmp/pids/unicorn.pid
UNICORN_USER=ubuntu
и в вашем сценарии инициализации добавьте все переменные:
if [ -f /etc/default/unicorn ]; then
. /etc/default/unicorn
fi
Вам нужно указать путь к unicorn_rails
:
UNICORN_HOME=/home/ubuntu/projects/asbest/current
cd $UNICORN_HOME
sudo -u ubuntu $UNICORN_HOME/unicorn_rails -c $UNICORN_HOME/config/unicorn.rb -D -E production
Вы правильно настроили sudo?
Вместо того, чтобы использовать sudo
, попробуйте использовать su [username]
а затем выполните команду.