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 init
es 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-up
para 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/interfaces
en 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-up
o started networking
cosas
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