Linux Graceful Shutdown

17

Słyszałem, że „shutdown -h now” nie jest wdzięcznym poleceniem shutdown, ponieważ robi coś podobnego do „kill -9” dla wszystkich procesów, w przeciwieństwie do „kill -15”.

Czy to prawda, a jeśli tak, to jaki jest bardziej wdzięczny sposób zamknięcia się, aby zapewnić wszystkim czas na oczyszczenie po sobie?

Ps Używając głównie CentOS, Ubuntu i Debian.

jwbensley
źródło
Zaczekam, aż ktoś inny wejdzie, ale to wcale nie brzmi dobrze. -h po prostu każe mu wprowadzić system w tryb HALT, a nie restartować. A „teraz” oznacza po prostu, że nie ma okresu karencji dla użytkowników na zamknięcie. Nie jestem pewien, jak którekolwiek z nich zmieniłoby rzeczywiste zachowanie zabójstwa podczas zamykania
Jeffery Smith
4
Proszę przeczytać stronę podręcznika dla shutdown ( man shutdown). To całkowicie wyjaśnia.
Andrew Schulman,

Odpowiedzi:

15

shutdown -h nowzadzwoni /etc/rc.d/rclub /etc/init.d/rc. rcSkrypt nazwać skrypty zabić nowego poziomu uruchomieniowego (0 do -h6 dla -r), a następnie za pomocą dowolnych skryptów startowych.

Zobaczysz, S30killprocslub S00killallczy coś takiego w zależności od dystrybucji. Dzieje się tak po wywołaniu wszystkich skryptów zabijania, aby po kolei z wdziękiem zatrzymać każdą usługę. kill -15Najpierw spróbuje , a potem kill -9.

Krótka odpowiedź: shutdown -h nowlub shutdown -r nowsą wdzięczni. halti rebootniegdyś był pełen wdzięku, ale będą po prostu dzwonić shutdown, chyba że skorzystasz z tej -fopcji.

Cakemox
źródło
12

Nie, to nie jest prawda. shutdownzmienia poziom inicjujący, który następnie uruchamia wszystkie skrypty zamykające. To, co robią te skrypty, zależy od skryptu. Ale zwykle nie przerywają procesów, ale wysyłają sygnał do końca.

Oto ręczny fragment 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
źródło
1
Cóż, w większości, jeśli nie we wszystkich używanych przeze mnie dystrybucjach, ostatnią rzeczą, którą wykonuje skrypt rc na poziomie 6 (restartu), jest uruchomienie globalnego killall, aby złapać wszelkie długotrwałe lub zawieszone procesy. Jest to jednak uruchamiane po zakończeniu wszystkich normalnych skryptów zatrzymania.
Adapttr
2
@adaptr Pewnie. Ale procesy miały szansę z gracją zakończyć. Jeśli nie, nie ma innej możliwości, jak je zabić.
mailq