Na sequência deessa questão, escrevi um serviço inicial simples (/etc/init/pms.conf) para minha caixa Ubuntu Server 11.04 sem cabeça da seguinte forma:
start on filesystem and net-device-up IFACE=eth0
stop on runlevel [016]
respawn
exec /home/administrator/pms-current/PMS.sh
Posso iniciar (ou parar) este serviço à vontade na linha de comando:
service pms start
E posso ver que está realmente funcionando.
No entanto, quando inicializo minha máquina pela primeira vez, o serviço não inicia. Se eu usar SSH na caixa e verificar o status do serviço, recebo:
$ service pms status
pms stop/waiting
Minha pergunta é por que isso está acontecendo? Por que meu serviço não inicia na inicialização?
ATUALIZAÇÃO 1: sem ter certeza se meu serviço estava sendo iniciado e subsequentemente morrendo ou simplesmente não estava sendo iniciado, adicionei o seguinte ao PMS.sh:
echo "STARTED" > $STARTLOG
Isso obviamente só me dáalgoprocurar. Eu testei isso iniciando o serviço sozinho e depois verificandoiniciar.log. Eu então apaguei oiniciar.loge reiniciado. Ele não estava lá após a reinicialização, então parece que o iniciante definitivamente não está iniciando meu serviço. Suponho que poderia estar morrendo num ponto anterior do processo, mas isso parece bastante improvável, dada a simplicidade de tudo.
ATUALIZAÇÃO 2: Acabei de atualizar para 11.10, que inclui uma atualização inicial, mas esse problema ainda ocorre.
ATUALIZAÇÃO 3: Conforme solicitado, inicializei com --debug
. A saída de cat /var/log/syslog | grep init
é muito longa para ser colocada na pergunta, mas você a visualizaaqui.
ATUALIZAÇÃO 4: Mais logs, desta vez o conf inicial está incluído no topo.Execute 1ecorrer 2.
Responder1
Eu recomendaria aumentar a verbosidade do trabalho, por exemplo, usando entradas pré-início/pós-início.
pre-start script
logger "pre-start for myprog"
end script
post-start script
logger "post-start for myprog"
end script
# and for PMS itself:
script
logger "just before executing PMS"
exec /home/administrator/pms-current/PMS.sh
end script
Mais informações emhttp://upstart.ubuntu.com/cookbook/
Dê uma olhada tambémhttp://upstart.ubuntu.com/wiki/Debugging
Responder2
O que provavelmente está acontecendo aqui é que o pms está iniciando antes dos adaptadores de rede serem ativados e provavelmente antes mesmo do adaptador de loopback (lo). Supondo que estamos falando do PS3 Media Server, é um serviço em rede e provavelmente não gosta de iniciar sem interfaces disponíveis.
Tente alterar seu critério de início para:
start on filesystem and net-device-up IFACE!=lo
Ou seja, comece depois que qualquer interface de rede "real" estiver ativa. No entanto, isso pode não ser o ideal, se eth0 for a próxima interface, o PMS será iniciado, mas você realmente deseja que o PMS use wlan0, isso não funcionará. O serviço será iniciado, mas talvez não tenha sido possível escolher a interface que você deseja ouvir. Supondo que você conheça a interface que irá transmitir e ela não será alterada, eu a codificaria no trabalho, por exemplo:
start on filesystem and net-device-up IFACE=wlan0
No Oneiric (11.10), você pode usar o evento static-network-up
para aguardar todos os dispositivos configurados estaticamente. O que é bom porque permite escrever trabalhos dependentes de rede sem codificar uma interface. [Nota: por "todos os dispositivos configurados estaticamente", estou me referindo ao uso /etc/network/interfaces
em vez do NetworkManager. Isso não significa estático no sentido de IP estático versus DHCP.]
Responder3
Ao examinar seu syslog, o processo pms começa sem erros, mas depois de um curto período de tempo, seu objetivo é alterado do início ao fim, o que significa que ele foi eliminado.
Isso é um pouco estranho porque você adicionou a cláusula repsawn, então ele deveria tentar reiniciar depois de ser interrompido, mas isso nunca acontece. Então, acho que você removeu a cláusula de reaparecimento.
Entre o início e a parada do serviço pms, apenas 2 serviços são iniciados ufw e interface de rede (eth0), e 1 é iniciado udev-fallback-graphics.
Parece que o processo pms está sendo iniciado em paralelo. Infelizmente, a documentação inicial é um pouco confusa sobre as diferenças exatas entre start on ...
vanilla e start on starting ...
e start on started ...
.
Tente alterar sua estrofe de inicialização para
start on started networking
ou apenas também
start on net-device-up IFACE=eth0
A saída do log é um pouco estranha, pois o evento net-device-up ocorre muito mais tarde, mas o pms inicia antes dele.
Isso deve garantir que seu processo comece apenas uma veztodosa configuração da rede está concluída, ou seja, o trabalho não apenas começou, mas também terminou.
Além disso, não confie completamente na saída do log; no início do processo de inicialização, o registro da saída em qualquer arquivo nem sempre funciona. Veja a resposta emDepurando o Upstart
Responder4
Eu tive o mesmo problema e finalmente resolvisimplesmentecom:
start on runlevel [2345]
sem nada net-device-up
ou started networking
outras coisas
Este é o script inicial completo e funciona perfeitamente:
# MyApp
description "MyApp"
author "me"
start on runlevel [2345]
stop on runlevel [016]
respawn
exec /usr/bin/myapp 2>> /var/logs/myapp.log