
Estou tentando fazer com que um servidor unicórnio seja iniciado quando o servidor for inicializado. Eu criei um script de shell que funciona se eu logar como usuário do Ubuntu e executar
/etc/init.d/unicorn start
Script de shell
#!/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
Quando reiniciei o servidor, percebi que o servidor unicórnio não estava escutando um soquete. Como executei o código com sucesso como usuário do Ubuntu, modifiquei o script para permitir que ele sempre use o usuário do Ubuntu via 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
Depois de reiniciar, o unicórnio ainda não iniciava, então tentei executar o script na linha de comando. Agora recebo o seguinte erro
sudo: unicorn_rails: command not found
Pesquisei de alto a baixo o que poderia causar isso, mas temo ter explorado meu conhecimento limitado do Linux. Pelo que entendi é que embora o sudo deva usar o usuário ubuntu para executar os comandos, ele ainda usa o ambiente do usuário root, que não está configurado para rodar Ruby ou unicórnio. alguém tem alguma experiência com isso?
Responder1
Use vars globais UNICORN_*
assim:
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
Outra boa maneira é extrair vars globais em /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
e em seu script de inicialização adicione alterar todos os vars por:
if [ -f /etc/default/unicorn ]; then
. /etc/default/unicorn
fi
Responder2
Em vez de usar sudo
, tente usar su [username]
e execute o comando.
Responder3
Você precisa especificar o caminho para 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
Você configurou o sudo apropriadamente?