Por que meu serviço inicial não inicia na inicialização do sistema?

Por que meu serviço inicial não inicia na inicialização do sistema?

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-uppara 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/interfacesem 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-upou started networkingoutras 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

informação relacionada