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?
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.
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?
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.
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.