O trabalho do Upstart não reaparece e trava ao tentar pará-lo / reiniciá-lo

2

Estou usando o Upstart 1.5 no Ubuntu 12.04 para gerenciar um processo criado por algum usuário, mas precisa ser gerenciado como trabalho do sistema, começando na inicialização, reaparecendo se ele falhar e conseguimos iniciá-lo / interrompê-lo em qualquer momento desejado Então, eu crio seu arquivo .conf em / etc / init e é o seguinte:

description "Start face services recognition and monitors it"
version "1.0"
start on runlevel[5]
stop on runlevel[06]
respawn
expect fork
normal exit 0 TERM STOP
script
exec sh -c /home/verstand/facefeatures
end script
post-stop script
if [ ! $EXIT_STATUS && ! $EXIT_SIGNAL ]
then
exec sudo -u $USER "/sbin/shutdown -r now"  
fi
end script

Os sinais aqui são intencionados para reiniciar o sistema em um caso de emergência onde o Upstart não reaparece o processo.

Agora, o problema é quando iniciamos o processo, ele roda bem, com sudo initctl start facefeatures , mas quando tentamos pará-lo, ele trava e precisamos usar Ctl + C para retornar o controle tty. Ainda mais, se tentarmos iniciá-lo novamente ou reiniciá-lo, o Upstart relata que ele já está em execução: start/running facefeatures , mas, se usarmos initctl list Upstart relata como se o processo estivesse morto: stop/killed facefeatures

Além disso, se reiniciarmos a primeira vez, o processo será executado normalmente, mas se reiniciarmos uma segunda vez, não o faremos mais ...

Qual é o problema do meu arquivo conf? Qual é a maneira correta de fazer isso?

    
por Edgar Sampere 31.05.2013 / 20:03

1 resposta

2

Se características da face não for um script, acredito que seja um problema de novato não saber qual processo assistir. Inicie com exec e não na sub-rotina script :

description "Start face services recognition and monitors it"
version "1.0"
start on runlevel[5]
stop on runlevel[06]
normal exit 0 TERM STOP
expect fork
respawn
exec /home/verstand/facefeatures
post-stop script
    if [ ! $EXIT_STATUS && ! $EXIT_SIGNAL ]
    then
        exec sudo -u $USER "/sbin/shutdown -r now"  
    fi
end script

Ao interromper o serviço, seu programa receberá um TERMO, se ele não reagir, ele será morto após cinco segundos.

    
por tombert 31.05.2013 / 21:53