O script do Ubuntu Upstart trava ao iniciar e parar

7

Eu tenho um script iniciante que iniciará um servidor personalizado do Jetty. Quando eu faço sudo start [myservice] nada acontece. Posteriormente, sudo status [myservice] mostra como: [myservice] start/killed, process 3586 .

Aqui está o script em /etc/init/[myservice].conf:

description "[description]"
author "[my name and email]"
start on runlevel [2345]
stop on runlevel [016]
respawn
expect fork
script
    sudo -u www-data /path/to/grafserv-start.sh >> /tmp/upstart.log 2>&1
end-script

E aqui está o grafserv-start.sh :

#!/bin/bash
/usr/bin/java -Djetty.port=3070 -jar /path/to/grafserv/trunk/start.jar
echo "Done starting GrafServ"

Eu tentei redirecionar a saída do comando de script para um arquivo de log tmp, mas esse arquivo nunca é criado. Quando eu começo, eu só pego um jeito, até que eu ^ C. Além disso, tentei executá-lo com strace, mas isso me deu muitas informações sobre soquetes.

    
por Simon Woodside 25.03.2011 / 21:35

3 respostas

2

sudo -u www-data

... irá travar se solicitar senha. Você já verificou que o usuário "script de inicialização" é executado como tem permissões sudoers para fazer isso?

    
por 26.03.2011 / 01:00
1

Acho que há três possíveis problemas:

  • Seu expect fork está errado porque o seu programa não chega ao fim. Este provavelmente não é o caso desde que você está usando um script, mas você pode querer tentar expect daemon ou não esperar nada.

  • Seu programa java não entra no modo daemon e, portanto, requer que seja colocado em segundo plano. Em outras palavras, você precisa de um & no final: sudo -u www-data /path/to/grafserv-start.sh >> /tmp/upstart.log 2>&1 &

  • Sua Upstart está em mau estado. Eu não sei exatamente como isso acontece, mas você pode ficar pronto em um estado em que, mesmo se você editar o script para ser correto, ele continuará travado. Se isso acontecer, renomeie o arquivo (ou seja, /etc/init/[myservice]-1.conf e tente iniciá-lo até parar de pendurar. Depois de obter o script correto renomeie o arquivo para o nome correto e reinicie o sistema.

por 12.06.2014 / 19:16
-1

Eu acho que você perdeu o exec na frente do seu roteiro em upstart ... Eu acho que é necessário. Tente isto:

exec sudo -u www-data /path/to/grafserv-start.sh >> /tmp/upstart.log 2>&1

Como Bittrance disse, você também pode querer ter certeza de que seu programa java é executado em segundo plano. Tente anexar um & ou algo assim ao final do comando em seu script se você não tiver nenhuma lógica em seu programa java que o execute como um processo em segundo plano ou um daemon.

    
por 02.04.2011 / 01:54