Come specificare un comando di spegnimento del demone con upstart?


9

In una configurazione iniziale come posso definire quale comando deve essere utilizzato per arrestare un server. Diciamo che ho un demone che ha due processi separati.

  • startup.sh - per avviare il server
  • shutdown.sh - per chiudere il server

Supponiamo di avere un file upstart che assomigli a questo.

description "Some Example Service"
author "Me"

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

exec startup.sh 

Come faccio a dire a upstart che dovrebbe chiamare shutdown.shquando si spegne il server? In che modo upstart normalmente si aspetta di chiudere un demone?

Risposte:


10

Usare execper avviare il processo va bene, ma quando lo si interrompe, se è assolutamente necessario eseguire uno script o un set di comandi specifici, è possibile utilizzare la pre-stopstanza.

pre-stop exec shutdown.sh

Suppongo che tu abbia provato a usare solo una stanza exec e non ha funzionato, probabilmente perché il tuo demone richiede una pulizia specializzata. Si noti che i demoni ben educati dovrebbero ricevere un segnale dall'inizio quando il lavoro viene interrotto e se gestiscono il segnale in modo appropriato, non dovrebbe essere necessaria alcuna pulizia aggiuntiva.

L'arresto di un lavoro comporta l'invio di SIGTERM. Se c'è qualcosa che deve essere fatto prima di SIGTERM, fallo qui. Probabilmente, i servizi dovrebbero gestire SIGTERM con molta grazia, quindi non dovrebbe essere necessario.

se c'è qualcosa di critico, come un flush su disco, e aumentare il timeout di kill non è un'opzione, pre-stop non è un brutto posto per farlo

Leggere anche questa sezione per l'intero flusso di lavoro di ciò che accade quando si interrompe un lavoro. Si noti quando viene eseguito il pre-stop e come viene successivamente inviato un segnale al processo, ovvero come upstart gestisce i processi di arresto normalmente.

La mia fonte è il ricettario ufficiale Upstart all'indirizzo: http://upstart.ubuntu.com/cookbook/


1
"Si noti che i demoni ben educati dovrebbero ricevere un segnale dall'avvio quando il lavoro viene interrotto e se gestiscono il segnale in modo appropriato, non dovrebbe essere necessaria alcuna pulizia aggiuntiva." - nota che usiamo gli script nel mondo Unix per avere il controllo delle cose oltre al lavoro dei programmatori. E questa è un'osservazione ridicola, perché abbiamo bisogno di un posto dove includere, ad esempio, l'invio di un'e-mail, la rimozione del blocco da dis ecc. E queste attività non devono essere parte del demone stesso. Quindi upstart non è pronto per essere utilizzato nell'ambiente server.
Kakaz,

Da questa risposta (l'Uno!) Vedo che non esiste un buon modo per fare ciò di cui abbiamo bisogno?
Kakaz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.