Linux Graceful Shutdown


17

Ho sentito che "shutdown -h now" non è un grazioso comando di shutdown perché fa qualcosa di simile a "kill -9" per tutti i processi, al contrario di "kill -15".

È vero, e se sì, quale è un modo più grazioso di chiudere per assicurarsi che tutto abbia il tempo di ripulire dopo se stesso?

Ps usando principalmente CentOS, Ubuntu e Debian.


Aspetterò che qualcun altro intervenga, ma non suona affatto bene. -h gli sta solo dicendo di mettere il sistema in modalità HALT invece di riavviare. E "ora" significa solo che non esiste un periodo di tolleranza per l'arresto degli utenti. Non sono sicuro di come uno di questi possa modificare il reale comportamento di uccisione dell'arresto
Jeffery Smith,

4
Si prega di leggere la pagina di manuale per shutdown ( man shutdown). Lo spiega completamente.
Andrew Schulman,

Risposte:


15

shutdown -h nowchiamerà /etc/rc.d/rco /etc/init.d/rc. Lo rcscript chiamerà gli script kill per il nuovo runlevel (0 per -h, 6 per -r), seguito da eventuali script di avvio.

Vedrai S30killprocso S00killallo qualcosa del genere a seconda della distro. Questo viene dopo che tutti gli script di kill sono stati chiamati per tentare di arrestare ogni servizio con grazia a turno. Ci proverà per kill -15primo, seguito da kill -9.

Risposta breve: shutdown -h nowo shutdown -r nowsono aggraziati. halte rebootusato per essere non aggraziato, ma ti chiameranno solo shutdownse non usi l' -fopzione.


12

No, questo non è vero. shutdowncambia il livello di init che quindi esegue tutti gli script di spegnimento. Che cosa fanno questi script dipende dallo script. Ma normalmente non terminano i processi ma inviano loro il segnale per terminare.

Quindi questo è l'estratto manuale di shutdown:

   shutdown  brings  the system down in a secure way.  All logged-in users
   are notified that the system is going down, and  login(1)  is  blocked.
   It is possible to shut the system down immediately or after a specified
   delay.  All processes are first notified that the system is going  down
   by the signal SIGTERM.  This gives programs like vi(1) the time to save
   the file being edited, mail and news processing programs  a  chance  to
   exit  cleanly,  etc.   shutdown  does  its  job  by signalling the init
   process, asking it to change the runlevel.  Runlevel 0 is used to  halt
   the  system, runlevel 6 is used to reboot the system, and runlevel 1 is
   used to put to system into a state where administrative  tasks  can  be
   performed; this is the default if neither the -h or -r flag is given to
   shutdown.  To see which actions are taken on halt  or  reboot  see  the
   appropriate entries for these runlevels in the file /etc/inittab.

1
Bene, sulla maggior parte se non tutte le distro che ho usato, l'ultima cosa che fa lo script rc runlevel 6 (reboot) è eseguire un killall globale, per catturare qualsiasi processo persistente o bloccato. Ma questo viene eseguito dopo che tutti i normali script di arresto sono stati completati.
adattamento

2
@adaptr Certo. Ma i processi hanno avuto la possibilità di terminare con grazia. Altrimenti non c'è altra possibilità che ucciderli.
mailq
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.