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 init
es 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 .
cat /var/log/syslog | grep init
después de habilitar el inicio de sesión de inicio de sesión inicial con las instrucciones en DepuraciónRespuestas:
Recomendaría aumentar la verbosidad del trabajo, por ejemplo, mediante el uso de entradas previas / posteriores al inicio.
Más información en http://upstart.ubuntu.com/cookbook/
También eche un vistazo a http://upstart.ubuntu.com/wiki/Debugging
fuente
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:
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:
En Oneiric (11.10), puede usar el evento
static-network-up
para 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/interfaces
lugar de NetworkManager. No significa estático en el sentido de IP estática frente a DHCP.]fuente
lo
yeth0
que 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é ...sleep 10
- o más alto - en un "script de preinicio" antes de ejecutar el script de shell.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 ...
vainillastart on starting ...
ystart on started ...
.Intente cambiar su estrofa de inicio a
o simplemente
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
fuente
Gestionado para solucionar un problema similar utilizando start on runlevel en su lugar:
fuente
Tuve el mismo problema y finalmente lo resolví simplemente con:
start on runlevel [2345]
sin ninguna
net-device-up
ostarted networking
cosasEste es el script de inicio completo, y funciona perfectamente:
fuente
Encontré
chkconfig
durante mi entrenamiento RHCSA / CE:Puede consultar su página de manual de Oneiric para obtener más detalles sobre sus capacidades.
fuente
He encontrado una solución para esto pero no la entiendo. Si muevo el PMS desde
/home/administrator
y hacia la/bin/pms
raí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:
Aún no funciona.
Supongo que por ahora haré un
/home/root/
directorio y moveré todo allí, aunque realmente me gustaría entenderlo completamente.fuente
chkconfig
tampoco funcionó? ¿Intentaste darle al directorio laPMS.sh
raí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..sh
, simplemente deje todo allí y edite el script para que apunte a ese directorio (¿o tal vez incluso cambie el directorio?).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.fuente
¿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 networking
ystart on network-interface-up INTERFACE=eth0
no funcionan, perostart 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.fuente
En mi caso, el servicio de inicio dependía de la secuencia de comandos ubicada en la carpeta sincronizada vagabundo . Resolvió el problema usando la siguiente línea:
Más información: http://razius.com/articles/launching-services-after-vagrant-mount/
fuente
Similar a @xuhcc, vine aquí para descubrir por qué mi script Vagrant Upstart no se estaba ejecutando. Se supone que lo siguiente funciona:
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í:
Funcionó muy bien para mí
fuente
funcionó para mí (necesito iniciar el servicio después de iface up):
fuente