Dado que Ubuntu se basa en advenedizo desde hace algún tiempo, me gustaría usar un trabajo de advenedizo para cerrar correctamente ciertas aplicaciones al apagar o reiniciar el sistema. Es esencial que el apagado o reinicio del sistema se detenga hasta que se cierren estas aplicaciones.
En ocasiones, las aplicaciones se iniciarán manualmente y, al apagar el sistema, se cerrará automáticamente mediante un script (que ya tengo). Dado que las aplicaciones no se pueden finalizar de manera confiable sin (casi todos) otros servicios en ejecución, se debe finalizar las aplicaciones antes de que comience el resto del apagado.
Creo que puedo resolver esto con un trabajo advenedizo que se activará al apagar, pero no estoy seguro de qué eventos debo usar de qué manera. Hasta ahora, he leído las siguientes declaraciones (en parte contradictorias):
- No hay un evento de apagado general en upstart
- Utilice una estrofa como
start on starting shutdown
en la definición del trabajo - Utilice una estrofa como
start on runlevel [06S]
en la definición del trabajo - Utilice una estrofa como
start on starting runlevel [06S]
en la definición del trabajo - Utilice una estrofa como
start on stopping runlevel [!06S]
en la definición del trabajo
De estas recomendaciones surgen las siguientes preguntas:
- ¿Hay o no hay un evento de apagado general en el advenedizo de Ubuntu?
- ¿Cuál es la forma recomendada de implementar un "gancho de apagado"?
- Cuándo se activan los eventos de nivel de ejecución [x]; ¿Es esto al ingresar al nivel de ejecución o al ingresar al nivel de ejecución?
- ¿Podemos usar algo como
start on starting runlevel [x]
ostart on stopping runlevel [x]
? - ¿Cuál sería la mejor solución para mi problema?
Muchas gracias
Respuesta aceptada:
starting
y runlevel
son eventos separados, por lo que no puede decir significativamente starting runlevel N
.
El runlevel N
El evento se emite al comienzo de ingresar al nivel de ejecución. Si start on runlevel N
entonces su tarea se ejecuta en la entrada. La forma de ejecutar cuando se completa la entrada al nivel de ejecución es run on started rc RUNLEVEL=N
.
Según tengo entendido, necesita un start on runlevel [06S]
para hacer lo que quieras; en teoría, debería ejecutarse antes de que se detenga cualquier otra cosa. Para un control más preciso, puede usar start on stopping apache or stopping mysql or ...
para que su tarea se ejecute antes de que cualquiera de ellos pueda cerrarse.
Editado para cambiar el nivel de ejecución 5 a S.