¿Por qué mi servicio advenedizo no se inicia al iniciar el sistema?

¿Por qué mi servicio advenedizo no se inicia al iniciar el sistema?

Siguiendo desdeesta pregunta, He escrito un servicio advenedizo simple (/etc/init/pms.conf) para mi cuadro Ubuntu Server 11.04 sin cabeza de la siguiente manera:

start on filesystem and net-device-up IFACE=eth0
stop on runlevel [016]
respawn

exec /home/administrator/pms-current/PMS.sh

Puedo iniciar (o detener) este servicio a voluntad desde la línea de comando:

service pms start

Y puedo ver que efectivamente se está ejecutando.

Sin embargo, cuando inicio mi máquina por primera vez, el servicio no se inicia. Si ingreso SSH en la casilla y verifico el estado del servicio, obtengo:

$ service pms status
pms stop/waiting

Mi pregunta es ¿por qué sucede esto? ¿Por qué mi servicio no se inicia al iniciar?

ACTUALIZACIÓN 1: no estoy seguro de si mi servicio se estaba iniciando y luego muriendo o simplemente no se estaba iniciando en absoluto, agregué lo siguiente a PMS.sh:

echo "STARTED" > $STARTLOG

Esto obviamente me daalgobuscar. Probé esto iniciando el servicio yo mismo y luego verificandoiniciar.log. Luego eliminé eliniciar.logy reiniciado. No estaba allí después del reinicio, por lo que parece que advenedizo definitivamente no está iniciando mi servicio. Supongo que podría estar muriendo en un punto anterior del proceso, pero eso parece bastante improbable dada la simplicidad de todo.

ACTUALIZACIÓN 2: Acabo de actualizar a 11.10, que incluye una actualización inicial, pero este problema persiste.

ACTUALIZACIÓN 3: Según lo solicitado, arranqué con --debug. El resultado de cat /var/log/syslog | grep inites demasiado largo para incluirlo en la pregunta, pero puedes verloaquí.

ACTUALIZACIÓN 4: Más registros, esta vez la configuración advenediza se incluye en la parte superior.Ejecutar 1ycorrer 2.

Respuesta1

Recomendaría aumentar la verbosidad del trabajo, por ejemplo, utilizando entradas previas y posteriores al inicio.

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

Más información enhttp://upstart.ubuntu.com/cookbook/

Échale un vistazo también ahttp://upstart.ubuntu.com/wiki/Debugging

Respuesta2

Lo que probablemente esté sucediendo aquí es que pms se inicia antes de que se activen sus adaptadores de red, y probablemente incluso antes que el adaptador de loopback (lo). Suponiendo que estamos hablando de PS3 Media Server, es un servicio en red y probablemente no le guste iniciarse sin interfaces disponibles.

Intente cambiar su criterio de inicio a:

start on filesystem and net-device-up IFACE!=lo

Es decir, comience después de que cualquier interfaz de red "real" esté activa. Sin embargo, eso podría no ser ideal, si eth0 es la siguiente interfaz, se inicia PMS, pero realmente desea que PMS use wlan0, eso no funcionará. El servicio se iniciará, pero es posible que no haya podido elegir la interfaz en la que deseaba escuchar. Suponiendo que conoce la interfaz por la que va a transmitir y que no cambiará, la codificaría en el trabajo, por ejemplo:

start on filesystem and net-device-up IFACE=wlan0

En Oneiric (11.10), puede usar el evento static-network-uppara esperar todos los dispositivos configurados estáticamente. Lo cual es bueno porque le permite escribir trabajos dependientes de la red sin codificar una interfaz. [Nota: por "todos los dispositivos configurados estáticamente", me refiero a usar /etc/network/interfacesen lugar de NetworkManager. No significa estático en el sentido de IP estática versus DHCP.]

Respuesta3

Al examinar su syslog, el proceso pms comienza sin errores, pero luego de un momento su objetivo cambia de inicio a fin, lo que significa que se elimina.

Esto es un poco extraño porque agregó la cláusula repsawn, por lo que debería intentar comenzar de nuevo después de detenerlo, pero nunca lo hace. Entonces supongo que eliminaste la cláusula de reaparición.

Entre el inicio y la detención del servicio pms, solo se inician 2 servicios ufw y network-interface (eth0), y 1 se inicia udev-fallback-graphics.

Parece que su proceso pms se está iniciando en paralelo. Desafortunadamente, la documentación inicial es un poco confusa sobre las diferencias exactas entre start on ...vanilla y start on starting ...y start on started ....

Intente cambiar su estrofa de inicio a

start on started networking

o simplemente también

start on net-device-up IFACE=eth0

La salida del registro es un poco extraña ya que el evento net-device-up llega mucho más tarde, pero pms comienza antes.

Esto debería garantizar que su proceso solo comience una vez.todoLa configuración de la red ha finalizado, es decir, el trabajo no sólo ha comenzado sino que también ha terminado.

Además, no confíe completamente en la salida del registro; al principio del proceso de arranque, registrar la salida en cualquier archivo no siempre funciona. Vea la respuesta enAdvenedizo de depuración

Respuesta4

Tuve el mismo problema y al final lo resolvísimplementecon:

start on runlevel [2345]

sin nada net-device-upo started networkingcosas

Este es el script inicial completo y funciona perfectamente:

# MyApp

description     "MyApp"
author          "me"

start on runlevel [2345]
stop on runlevel [016]

respawn

exec /usr/bin/myapp 2>> /var/logs/myapp.log

información relacionada