Script de daemon personalizado: funciona, mas não é executado na inicialização / inicialização

2

este é o Ubuntu 10.10 Maverick.

Eu tenho o seguinte script de shell no init.d que eu quero executar como um "daemon" (serviço de segundo plano com start / stop / restart realmente) na inicialização do sistema. Existe um link simbólico em rc3.d. Eu tentei 4 e 5 também. (O ideal seria inicializar antes que o login gráfico aconteça e antes que um usuário faça o login.)

IMPORTANTE: o script funciona 100% conforme o esperado e necessário ao testar isso com serviço MetaLeapDaemon start e serviço MetaLeapDaemon stop . (Esse script de shell chama um programa Python que garante que os arquivos .pid apropriados sejam criados na inicialização e excluídos na saída.)

Então, geralmente funciona bem, mas agora meu único problema é por que ele não será executado em nenhum dos níveis de execução que tentei. Eu sei com certeza que não é executado porque o arquivo de log normalmente criado não é criado.

Como você pode ver (pela falta de qualquer comando uid: gid args nos comandos start-stop-daemon) isso seria executado apenas sob root, isso é proibido em uma configuração padrão?

Aqui está o script, praticamente o seu script de daemon run-of-the-mill realmente:

#! /bin/sh

DAEMON=/opt/metaleap/_core/daemon/MetaLeapDaemon.py
NAME=MetaLeapDaemon
DESC="MetaLeapDaemon"

test -f $DAEMON || exit 0

set -e

case "" in
    start)
        start-stop-daemon --start --pidfile /var/run/$NAME.pid --exec $DAEMON
        ;;
    stop)
        start-stop-daemon --stop --pidfile /var/run/$NAME.pid
        ;;
    restart)
        start-stop-daemon --stop --pidfile /var/run/$NAME.pid
        sleep 1
        start-stop-daemon --start --pidfile /var/run/$NAME.pid --exec $DAEMON
        ;;
    *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart}" >&2
        exit 1
        ;;
esac

exit 0
    
por pearjoint 10.04.2011 / 10:56

2 respostas

1

Eu estou respondendo isso por ser completo, mesmo que você já tenha feito um trabalho do Upstart (e esse é o caminho a seguir, não estou sugerindo que você volte aqui) ....

Acho que a principal coisa que você perdeu na primeira vez foi o runlevel. Eu estou supondo que você está acostumado com RPM distro onde é tipicamente runlevel 3 para multiusuário e runlevel 5 para GUI?

No Debian e no Ubuntu, existe apenas um único usuário (1) e multiusuário (com GUI, se instalado). E o multiusuário é runlevel 2. Então seus links simbólicos falharam porque você nunca chegou à RL3.

Usar o comando update-rc.d facilita o gerenciamento dos links simbólicos.

De qualquer forma, estou escrevendo isso para qualquer outra pessoa que você possa realmente precisar. Embora eu sugira que eles convertam o script para um Upstart também!

    
por Mark Russell 04.09.2011 / 05:40
-1

Use o seguinte comando para iniciar seu script na inicialização.

Adicione aos aplicativos de inicialização.

sudo -u USERNAME COMMAND

A propósito, alguém me disse para usar o NOPASSWORD, senão não funciona:

  

É melhor executar o sudo visudo para editar o arquivo / etc / sudoers e adicionar um NOPASSWD ao comando em vez de escrever a senha no script. - Lekensteyn

Espero que isso tenha ajudado você,

Daniel

    
por omnidan 10.04.2011 / 16:57