GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Il modo migliore per creare un gancio di spegnimento?

Poiché Ubuntu fa affidamento su upstart da un po' di tempo, vorrei utilizzare un lavoro upstart per arrestare con grazia determinate applicazioni all'arresto o al riavvio del sistema. È essenziale che l'arresto o il riavvio del sistema sia bloccato fino alla chiusura di queste applicazioni.

Le applicazioni verranno avviate manualmente in alcune occasioni e all'arresto del sistema dovrebbero essere terminate automaticamente da uno script (che ho già). Poiché le applicazioni non possono essere terminate in modo affidabile senza (quasi tutti) gli altri servizi in esecuzione, è necessario terminare le applicazioni prima che inizi il resto dell'arresto.

Penso di poter risolvere questo problema con un lavoro nuovo che verrà attivato allo spegnimento, ma non sono sicuro di quali eventi dovrei usare in che modo. Finora ho letto le seguenti affermazioni (in parte contraddittorie):

  • Nessun evento di arresto generale in upstart
  • Usa una stanza come start on starting shutdown nella definizione del lavoro
  • Usa una stanza come start on runlevel [06S] nella definizione del lavoro
  • Usa una stanza come start on starting runlevel [06S] nella definizione del lavoro
  • Usa una stanza come start on stopping runlevel [!06S] nella definizione del lavoro

Da queste raccomandazioni sorgono le seguenti domande:

  • C'è o non c'è un evento di spegnimento generale nell'upstart di Ubuntu?
  • Qual ​​è il modo consigliato per implementare un "hook di spegnimento"?
  • Quando vengono attivati ​​gli eventi runlevel [x]; è quando si è entrati nel runlevel o quando si è entrati nel runlevel?
  • Possiamo usare qualcosa come start on starting runlevel [x] o start on stopping runlevel [x] ?
  • Quale sarebbe la soluzione migliore per il mio problema?

Grazie mille

Risposta accettata:

starting e runlevel sono eventi separati, quindi non puoi dire in modo significativo starting runlevel N .

Il runlevel N l'evento viene emesso all'inizio dell'accesso al runlevel. Se start on runlevel N quindi l'attività viene eseguita all'ingresso. Il modo per eseguire quando l'accesso al runlevel è completato è run on started rc RUNLEVEL=N .

A quanto ho capito, è necessario un start on runlevel [06S] fare quello che vuoi; in teoria dovrebbe funzionare prima che qualsiasi altra cosa venga interrotta. Per un controllo più preciso potresti usare start on stopping apache or stopping mysql or ... in modo che la tua attività venga eseguita prima che venga consentita la chiusura di una di esse.

Correlati:come bloccare lo schermo utilizzando la nuova schermata di blocco dalla riga di comando?

Modificato per cambiare il runlevel 5 in S.


Ubuntu
  1. Sopravvivenza al riavvio:migliori pratiche

  2. Sopravvivenza al riavvio:migliori pratiche

  3. Il modo migliore per cercare nella storia di Shell?

  4. Il modo migliore per montare la cartella remota?

  5. Modo per fare in modo che uno script di shell venga sempre eseguito come root?

Il modo migliore per installare Docker su Ubuntu 20.04 Linux

Qual è il modo migliore per masterizzare un file video su un DVD?

Comandi Linux “shutdown”, “poweroff”, “halt”, “reboot”.

Il modo migliore per eseguire il sandbox di Apache su Linux

Il modo migliore per disabilitare lo scambio in Linux

Il modo migliore per rimuovere il comando di spegnimento, ma continuare a riavviare