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 eu 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, usar um ambiente python virtual, iniciar o servidor), mas isso não funciona corretamente. Ou o terminal falha 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 por um usuário pypi?

Informações adicionais e restrições:

  • Eu quero fazer isso da maneira mais simples possível
  • Sem quaisquer 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 escassas, confusas, incorretas ou não se aplicam ao meu caso de executar um serviço como um usuário diferente root.
Alex
fonte

Respostas:

1

Um script básico para iniciar um serviço poderia 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: Coloque-o 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
ahilsend
fonte