¿Cómo especificar un comando de apagado del demonio con arranque?

9

En una configuración inicial, ¿cómo defino qué comando se debe utilizar para apagar un servidor? Digamos que tengo un demonio que tiene dos procesos separados.

  • startup.sh: para iniciar el servidor
  • shutdown.sh - para apagar el servidor

Supongamos que tengo un archivo de inicio que se ve así.

description "Some Example Service"
author "Me"

start on runlevel [2345]
stop on runlevel [016]
respawn

exec startup.sh 

¿Cómo le digo al advenedizo que debería llamar shutdown.shal apagar el servidor? ¿Cómo espera normalmente el advenedizo cerrar un demonio?

ams
fuente

Respuestas:

10

Usar execpara iniciar el proceso está bien, pero al detenerlo, si es absolutamente necesario ejecutar un script específico o un conjunto de comandos, puede usar la pre-stopestrofa.

pre-stop exec shutdown.sh

Supongo que ha intentado usar una estrofa ejecutiva y no funcionó, posiblemente porque su demonio requiere una limpieza especializada. Tenga en cuenta que los demonios con buen comportamiento deben recibir una señal desde el inicio cuando se detiene el trabajo, y si manejan la señal adecuadamente, no se necesitará una limpieza adicional.

Detener un trabajo implica enviarle SIGTERM. Si hay algo que debe hacerse antes de SIGTERM, hágalo aquí. Podría decirse que los servicios deben manejar SIGTERM con mucha gracia, por lo que esto no debería ser necesario.

Si hay algo crítico, como una descarga al disco, y aumentar el tiempo de espera de matar no es una opción, pre-stop no es un mal lugar para hacerlo.

Lea también esta sección para ver todo el flujo de trabajo de lo que sucede cuando detiene un trabajo. Observe cuándo se ejecuta la detención previa y cómo se envía una señal al proceso posterior, que es cómo el advenedizo maneja normalmente los trabajos de detención.

Mi fuente es el libro de cocina oficial de Upstart en: http://upstart.ubuntu.com/cookbook/

roadmr
fuente
1
"Tenga en cuenta que los demonios con buen comportamiento deben recibir una señal desde el inicio cuando se detiene el trabajo, y si manejan la señal adecuadamente, no se necesitará una limpieza adicional". Tenga en cuenta que usamos scripts en el mundo Unix para tener el control de las cosas además del trabajo de los programadores. Y esta es una observación ridícula, porque necesitamos un lugar para incluir, por ejemplo, enviar un correo electrónico, eliminar el bloqueo de la pantalla, etc., y estas tareas no tienen que ser parte del demonio. Por lo tanto, el arranque no está listo para usarse en el entorno de servidores.
kakaz
De esta respuesta (¡la única!) Veo que no hay una buena manera de hacer lo que necesitamos.
kakaz