Como iniciar um serviço no momento da inicialização no Ubuntu 12.04, executado como um usuário diferente?

0

Eu tenho um servidor ClueReleaseManager que instalei em um sistema Ubuntu 12.04 de um usuário separado (chamado pypi ), e eu quero ser capaz de iniciar este servidor na inicialização.

Eu já tentei criar um script bash simples com alguns comandos (login como usuário pypi , use um ambiente virtual python, inicie o servidor), mas isso não funciona corretamente. Ou o terminal trava ou quando tento perguntar o status do serviço é iniciado e estou logado como usuário pypi ...?

Então, aqui está a pergunta: Quais são as etapas a seguir para garantir que o serviço ClueReleaseManager seja inicializado corretamente no tempo de inicialização e que eu possa controlar (iniciar / parar / ..) durante o tempo de execução enquanto o serviço estiver sendo executado. um usuário pypi ?

Informações adicionais e restrições:

  • Eu quero fazer isso da maneira mais simples possível
  • Sem outros pacotes / programas a serem instalados
  • Eu não estou familiarizado com a estrutura de inicialização do Ubuntu 12.04
  • Todas as informações que encontrei na Web são muito esparsas, confusas, incorretas ou não se aplicam ao meu caso de executar um serviço como um usuário diferente de root .
por Alex 26.06.2013 / 08:36

1 resposta

1

Um script básico para iniciar um serviço pode ser assim:

#!/bin/sh

# This is for the 'update-rc.d', so it knows when to start your service.
### BEGIN INIT INFO
# Provides:          your-script
# Required-Start:    $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: a short description
# Description:       a long description
### END INIT INFO

COMMAND="echo -n 'I am: '; whoami"

log () {
    echo "$@"
    logger -p user.info -t "ClueReleaseManager [$$]" "$@"
}

main () {
    case "$1" in
        stop)
        # stop your service
            echo "Stopping"
            ;;
        start)
            # run your service as user pypi
            # doesn't need password as root
            echo "Starting"
            # you probably want to start it in background
            # (don't block the other services)
            (su - pypi -c "$COMMAND") &
            ;;
        restart|force-reload)
        # restart your service
            echo "Restarting"
            ;;
        *)
        # wrong command
            echo "Unknown command: '$1'"
            ;;
    esac
}

# If you want, you can even log the whole.
# Unless you changed it it should go to /var/log/syslog
main "$1" 2>&1 | log


# Better exit with success, not sure if this can screw up Ubuntus boot process.
exit 0

update-rc.d como fazer: em /etc/init.d/your-script (ou link para ele). Torne executável e adicione aos serviços de inicialização:

$ sudo chmod +x /etc/init.d/your-script
$ sudo update-rc.d your-script defaults

Agora você pode iniciar e interromper seu serviço:

$ sudo your-script start
$ sudo your-script stop
    
por 26.06.2013 / 18:18