Linux Graceful Shutdown

17

Ich habe gehört, dass "shutdown -h now" kein würdevoller Befehl zum Herunterfahren ist, da er für alle Prozesse "kill -9" und nicht "kill -15" bedeutet.

Ist das wahr, und wenn ja, was ist eine elegantere Möglichkeit, das System herunterzufahren, um sicherzustellen, dass alles Zeit hat, sich nach seinem Selbst zu säubern?

Ps Hauptsächlich mit CentOS, Ubuntu und Debian.

jwbensley
quelle
Ich werde warten, bis sich jemand anderes anmeldet, aber das klingt überhaupt nicht richtig. -h sagt nur, dass das System in den HALT-Modus versetzt werden soll, anstatt neu zu starten. Und "jetzt" bedeutet nur, dass die Benutzer keine Schonfrist zum Herunterfahren haben. Ich bin mir nicht sicher, wie dies das tatsächliche Abschaltverhalten beeinflussen würde
Jeffery Smith,
4
Bitte lesen Sie die Handbuchseite zum Herunterfahren ( man shutdown). Es erklärt dies vollständig.
Andrew Schulman

Antworten:

15

shutdown -h nowwird anrufen /etc/rc.d/rcoder /etc/init.d/rc. Das rcSkript ruft die Kill-Skripte für das neue Runlevel (0 für -h, 6 für -r) auf, gefolgt von Start-Skripten.

Du wirst sehen, S30killprocsoder S00killallso ähnlich, abhängig von deiner Distribution. Dies geschieht, nachdem alle Kill-Skripte aufgerufen wurden, um zu versuchen, jeden Dienst ordnungsgemäß zu beenden. Es wird kill -15zuerst versucht , gefolgt von kill -9.

Kurze Antwort: shutdown -h nowoder shutdown -r nowsind anmutig. haltund war rebootnicht anmutig, aber sie werden nur shutdownfür Sie anrufen , wenn Sie die -fOption verwenden.

Cakemox
quelle
12

Nein, das ist nicht wahr. shutdownÄndert die Init-Ebene, die dann alle Shutdown-Skripte ausführt. Was diese Skripte tun, hängt vom Skript ab. Normalerweise beenden sie jedoch keine Prozesse, sondern senden ihnen das Signal zum Beenden.

Das ist also der manuelle Auszug für 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.
mailq
quelle
1
Nun, auf den meisten, wenn nicht allen Distributionen, die ich verwendet habe, führt das Skript runlevel 6 (reboot) rc als letztes einen globalen Killall aus, um verweilende oder hängengebliebene Prozesse zu erfassen. Dies wird jedoch ausgeführt, nachdem alle normalen Stoppskripts ausgeführt wurden.
4.
2
@adaptr Sicher. Aber die Prozesse hatten die Chance, anmutig zu enden. Wenn sie es nicht taten, gab es keine andere Möglichkeit, als sie zu töten.
mailq