
Estoy intentando que un servidor Unicorn se inicie cuando se inicia el servidor. Creé un script de shell que funciona si inicio sesión como usuario de ubuntu y ejecuto
/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
Cuando reinicié el servidor, noté que el servidor Unicorn no estaba escuchando ningún socket. Como ejecuté el código con éxito como usuario de ubuntu, modifiqué el script para permitir que siempre use el usuario de ubuntu a través de 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
Después de reiniciar, Unicorn todavía no se inicia, así que intenté ejecutar el script desde la línea de comando. Ahora me sale el siguiente error
sudo: unicorn_rails: command not found
He buscado por todas partes qué podría causar esto, pero me temo que he aprovechado mi conocimiento limitado de Linux. Por lo que puedo entender es que aunque sudo debería usar el usuario de ubuntu para ejecutar los comandos, todavía usa el entorno del usuario root, que no está configurado para ejecutar Ruby o Unicorn. ¿Alguien tiene alguna experiencia con esto?
Respuesta1
Utilice vars globales UNICORN_*
como esta:
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
Otra buena forma es extraer variables globales en /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
y en su script de inicio agregue cambiar todas las variables mediante:
if [ -f /etc/default/unicorn ]; then
. /etc/default/unicorn
fi
Respuesta2
En lugar de usar sudo
, intente usar su [username]
y luego ejecute el comando.
Respuesta3
Debe especificar la ruta a 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
¿Has configurado sudo correctamente?