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]
ostart 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.
Modificato per cambiare il runlevel 5 in S.