¿Por qué mi servicio de arranque no se inicia en el arranque del sistema?


37

Siguiendo con esta pregunta , he escrito un sencillo servicio de inicio ( /etc/init/pms.conf ) para mi cuadro sin cabeza de Ubuntu Server 11.04 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 comandos:

service pms start

Y puedo ver que de hecho está funcionando.

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é está pasando esto? ¿Por qué mi servicio no comienza en el arranque?

ACTUALIZACIÓN 1 : sin saber si mi servicio se estaba iniciando y posteriormente muriendo o simplemente no se estaba iniciando, agregué lo siguiente a PMS.sh:

echo "STARTED" > $STARTLOG

Obviamente, esto solo me da algo que buscar. Probé esto iniciando el servicio yo mismo y luego comprobando start.log . Luego borré start.log y reinicié . No estaba allí después del reinicio, por lo que parece que el arranque 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 aún ocurre.

ACTUALIZACIÓN 3 : según lo solicitado, he arrancado con --debug. El resultado de cat /var/log/syslog | grep inites demasiado largo para colocarlo en la pregunta, pero puede verlo aquí .

ACTUALIZACIÓN 4 : más registros, esta vez la configuración inicial se incluye en la parte superior. Corre 1 y corre 2 .


¿Estás seguro de que el script no se ejecutó? El mensaje de detención / espera de pms significa que se ejecutó el trabajo inicial y que todos los comandos finalizaron normalmente.
organizar el

Agregue la salida de cat /var/log/syslog | grep initdespués de habilitar el inicio de sesión de inicio de sesión inicial con las instrucciones en Depuración
inicial

@Anarci: consulte la actualización 3 en mi pregunta.
Kent Boogaart

La mayoría de los usuarios no darán una dirección de correo electrónico como esa, sino que proporcionarán un enlace a un sitio de pastebin como Ubuntu pastebin
Ciaran Liedeman

@Anarci: hecho, mira mi pregunta.
Kent Boogaart

Respuestas:


19

Recomendaría aumentar la verbosidad del trabajo, por ejemplo, mediante el uso de entradas previas / 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 en http://upstart.ubuntu.com/cookbook/

También eche un vistazo a http://upstart.ubuntu.com/wiki/Debugging


Esto realmente me está molestando. He probado una docena de cosas diferentes en la parte posterior de tu publicación. Todos han fallado al variar los mensajes oscuros en los registros. Mi último intento resultó en init: el proceso principal de pms (1329) terminó con el estado 143 , lo que para mí no significa nada. Puedo ver que PMS.sh ni siquiera se está iniciando porque lo primero que hace es escribir en su propio registro, y esa entrada de registro no está presente. Puedo ver mi salida previa al inicio, que me dice que el archivo de destino existe y es ejecutable. Mañana retomaré esto, pero si tienes alguna idea, me encantaría escucharla. Gracias.
Kent Boogaart

hola @KentBoogaart, parece que tengo tu mismo problema. ¿Has encontrado una solución?
Daniele B

@KentBoogaart ¿Tengo el mismo problema que tú? ¿Alguna suerte con la tuya?
Mevin Babu

14

Lo que probablemente está sucediendo aquí es que pms está comenzando antes de que aparezcan los adaptadores de red, y probablemente incluso antes del adaptador de bucle invertido (lo). Suponiendo que estamos hablando de PS3 Media Server, es un servicio en red y probablemente no le gusta iniciar sin interfaces disponibles.

Intente cambiar su criterio de inicio a:

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

Es decir, comenzar después de que cualquier interfaz de red "real" esté activa. Sin embargo, eso podría no ser lo ideal, si eth0 es la próxima interfaz activa, 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 desea que escuche. Suponiendo que conozca la interfaz que va a transmitir y 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 a 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 en /etc/network/interfaceslugar de NetworkManager. No significa estático en el sentido de IP estática frente a DHCP.]


Esto sonaba como el truco, pero no funcionó. Sólo tengo loy eth0que he utilizado su segunda sugerencia: start on filesystem and net-device-up IFACE=eth0. Todavía no ir después de un reinicio. Acabo de notar algo en el registro de PMS que puede ser una ventaja. Investigaré y volveré ...
Kent Boogaart

Es interesante. Una cosa que no mencioné es que probé su script original y funcionó en el arranque de mi máquina. Lo atribuí solo a la suerte del sorteo (es decir, en mi condición de carrera, ganó el auto bueno y en el suyo ganó el auto malo). Realmente no puedo ver qué otra dependencia nos estamos perdiendo aquí. Extraño.
Mark Russell

2
Como puede iniciarlo después de arrancar, debemos perder otra dependencia del servicio. Un truco sucio que podría funcionar (pero no nos iluminará en absoluto) es simplemente colocar un sleep 10- o más alto - en un "script de preinicio" antes de ejecutar el script de shell.
Mark Russell

Lo siento Mark, pero estamos en la misma página. Ya probé el sueño 10 en un script previo al inicio. No vayas. Luego intenté eliminar el debug.log por completo y reiniciar. Después del arranque, tuve el mismo estado de servicio y ningún archivo debug.log, así que no estoy convencido de que PMS se ejecute en absoluto. ¿Hay una manera fácil de diagnosticar esto? Si modifico el PMS.sh para escupir alguna salida, ¿a dónde irá? Supongo que siempre podría dirigirlo a mi propio archivo, podría darle una oportunidad a continuación.
Kent Boogaart

Acabo de actualizar mi pregunta con más información.
Kent Boogaart

3

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

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

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

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

Intente cambiar su estrofa de inicio a

start on started networking

o simplemente

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 que haya finalizado toda la configuración de la red, es decir, el trabajo no solo ha comenzado sino que ha finalizado.

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


3

Gestionado para solucionar un problema similar utilizando start on runlevel en su lugar:

start on runlevel [2345]

3

Tuve el mismo problema y finalmente lo resolví simplemente con:

start on runlevel [2345]

sin ninguna net-device-upo started networkingcosas

Este es el script de inicio 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

1

Encontré chkconfigdurante mi entrenamiento RHCSA / CE:

sudo apt-get install chkconfig
sudo chkconfig pms on

Puede consultar su página de manual de Oneiric para obtener más detalles sobre sus capacidades.


1

He encontrado una solución para esto pero no la entiendo. Si muevo el PMS desde /home/administratory hacia la /bin/pmsraíz como propietario, todo funciona bien.

Si lo dejo debajo, /home/administrator/pero me aseguro de que root sea el propietario de todo, excepto el /home/administrator/directorio, aún no funciona.

Si configuro al administrador como propietario de todo y cambio la parte pertinente de mi script a:

sudo su administrator -c '/home/administrator/pms-current/PMS.sh'

Aún no funciona.

Supongo que por ahora haré un /home/root/directorio y moveré todo allí, aunque realmente me gustaría entenderlo completamente.


¿Entonces chkconfigtampoco funcionó? ¿Intentaste darle al directorio la PMS.shraíz? Si solo su solución funciona, vaya a la página de Launchpad de Upstart y póngase en contacto directamente con los desarrolladores.
Oxwivi

Y si es suficiente con moverlo .sh, simplemente deje todo allí y edite el script para que apunte a ese directorio (¿o tal vez incluso cambie el directorio?).
Oxwivi

Sí, intenté hacer que todo el directorio PMS fuera propiedad de root. Presumiblemente no funcionó porque / home / administrador / no es propiedad de root.
Kent Boogaart

De todos modos, esto no tiene sentido, regularmente ejecuto scripts en mi directorio / home a través del sistema de arranque sin problemas, extraño.
organizar el

Aún más extraño: acabo de probar todo en / home / root / que obviamente es propiedad de root. No funciono Moví todo de nuevo a / bin / pms y funcionó nuevamente. Por lo tanto, parece que intentar iniciar PMS desde abajo / inicio no funciona en mi sistema.
Kent Boogaart

1

Tuve un problema similar de "no iniciar" cuando me di cuenta de que mi secuencia de comandos dependía de un archivo que estaba en mi casa, y la casa no era accesible porque estaba encriptada con el mecanismo estándar de ubuntu (.Private).

start on local-filesystems El evento se emite (probablemente) antes de que finalice el proceso de descifrado.


1

¿Es su directorio de inicio en NFS? A veces, la raíz no puede acceder a NFS.

Para el registro, en mi pequeña prueba justo ahora en 12.04:

  • start on started networkingy start on network-interface-up INTERFACE=eth0 no funcionan, pero

  • start on started network-interface INTERFACE=eth0 hace.

Gracias a http://os4.org/wiki/upstart.html por señalar que initctl list siempre muestra la red de trabajo como detenida.


El enlace al que se hace referencia está roto.
slm


0

Similar a @xuhcc, vine aquí para descubrir por qué mi script Vagrant Upstart no se estaba ejecutando. Se supone que lo siguiente funciona:

comenzar en vagabundo montado

Pero no lo hace en algunas versiones debido al siguiente error.

https://github.com/mitchellh/vagrant/issues/6074

La solución que figura en el informe funcionó muy bien para mí:

$ cat /etc/init/workaround-vagrant-bug-6074.conf 
# workaround for https://github.com/mitchellh/vagrant/issues/6074
start on filesystem
task

env MOUNTPOINT=/vagrant

script
  until mountpoint -q $MOUNTPOINT; do sleep 1; done
  /sbin/initctl emit --no-wait vagrant-mounted MOUNTPOINT=$MOUNTPOINT
end script

Funcionó muy bien para mí


0

funcionó para mí (necesito iniciar el servicio después de iface up):

start on started networking and net-device-up IFACE=wlan1 
stop on shutdown

respawn
respawn limit 10 10
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.