Inicia um processo como um usuário específico

1

Eu tenho o seguinte script que reinicia deus quando eu reinicio meu servidor (Ubuntu). Como posso começar deus como o usuário "rails"?

#!/bin/sh

### BEGIN INIT INFO
# Provides:             god
# Required-Start:       $all
# Required-Stop:        $all
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    God
### END INIT INFO

NAME=god
DESC=god
PID=/home/rails/xxx/shared/pids/god.pid
LOG=/home/rails/xxx/shared/log/god.log

set -e

# Make sure the binary and the config file are present before proceeding
test -x /usr/bin/god || exit 0

# Create this file and put in a variable called GOD_CONFIG, pointing to
# your God configuration file
test -f /etc/default/god && . /etc/default/god
[ $GOD_CONFIG ] || exit 0

. /lib/lsb/init-functions

RETVAL=0

case "$1" in
  start)
    echo -n "Starting $DESC: "
    /bin/su rails -c '/usr/bin/god -c $GOD_CONFIG -P $PID -l $LOG'
    RETVAL=$?
    echo "$NAME."
    ;;
  stop)
    echo -n "Stopping $DESC: "
    kill 'cat $PID'
    RETVAL=$?
    echo "$NAME."
    ;;
  restart)
    echo -n "Restarting $DESC: "
    kill 'cat $PID'
    /bin/su rails -c '/usr/bin/god -c $GOD_CONFIG -P $PID -l $LOG'
    RETVAL=$?
    echo "$NAME."
    ;;
  status)
    /bin/su rails -c '/usr/bin/god status'
    RETVAL=$?
    ;;
  *)
    echo "Usage: god {start|stop|restart|status}"
    exit 1
    ;;
esac

exit $RETVAL

Qualquer ajuda com isso seria incrível, pois eu sou um total n00b quando se trata de servidores.

    
por JimNeath 02.10.2009 / 14:41

3 respostas

3

O comando sudo é usado para executar coisas como outros usuários, por exemplo:

sudo -u rails ls $someDir

Então, acho que o seguinte deve funcionar (Experimente e veja):

sudo -u rails /usr/bin/god -c $GOD_CONFIG -P /var/run/god.pid -l /var/log/god.log

Além disso, verifique a página man do sudo, o comando deus depende de algumas variáveis de ambiente que estão sendo definidas ...

    
por 02.10.2009 / 14:49
1

Verifique as permissões no seu script. Eles devem ser legíveis e executáveis em todo o mundo.

Além disso, em alguns lugares do seu script, você tem:

usr/bin/god ...

Provavelmente deveria ser:

/usr/bin/god ...
    
por 02.10.2009 / 15:37
1

Isso geralmente é realizado em scripts de inicialização com su :

su rails -c "/usr/bin/god -c $GOD_CONFIG -P /var/run/god.pid -l /var/log/god.log"

Eu não testei isso, então posso ter algo estranho errado.

Além disso, supondo que esteja sendo executado como root até o momento, certifique-se de que os arquivos pid e log não sejam de propriedade do root e inacessíveis aos trilhos do usuário.

    
por 02.10.2009 / 16:41