GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿La mejor manera de hacer un gancho de apagado?

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] o start 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.

Relacionado:¿Cómo bloquear la pantalla usando la nueva pantalla de bloqueo desde la línea de comandos?

Editado para cambiar el nivel de ejecución 5 a S.


Ubuntu
  1. Reiniciar la supervivencia:mejores prácticas

  2. Centos:¿la mejor manera de agregar una ruta permanente?

  3. ¿La mejor manera de montar una carpeta remota?

  4. ¿La mejor manera de probar Ubuntu en la computadora?

  5. ¿La mejor manera de compilar un kernel para un procesador I7?

La mejor manera de instalar Docker en Ubuntu 20.04 Linux

Manera de hacer que un script de Shell siempre se ejecute como raíz?

¿Alguna forma de hacer que las aplicaciones instaladas de Snap se vean más nativas?

La mejor manera de sandbox Apache en Linux

¿Cuál es la mejor manera de aprender SELinux?

La mejor manera de eliminar el comando de apagado, pero sigue reiniciando