
Я пытаюсь запустить сервер unicorn при загрузке сервера. Я создал скрипт оболочки, который работает, если я вхожу как пользователь 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
Когда я перезагрузил сервер, я заметил, что сервер unicorn не прослушивает сокет. Поскольку я успешно запустил код как пользователь 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
После перезагрузки unicorn все еще не запустился, поэтому я попробовал запустить скрипт из командной строки. Теперь я получаю следующую ошибку
sudo: unicorn_rails: command not found
Я искал везде, где это могло произойти, но, боюсь, я задействовал свои ограниченные знания Linux. Насколько я могу понять, хотя sudo должен использовать пользователя ubuntu для выполнения команд, он все равно использует среду пользователя root, которая не настроена на запуск ruby или unicorn. Есть ли у кого-нибудь опыт с этим?
решение1
Используйте глобальные переменные 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
решение2
Вместо использования sudo
попробуйте использовать su [username]
и затем выполните команду.
решение3
Вам необходимо указать путь к 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?