Linux Graceful Shutdown


17

Я чув, що "shutdown -h now" не є витонченою командою вимкнення, тому що вона робить щось подібне до "kill -9" для всіх процесів, на відміну від "kill -15".

Це правда, і якщо так, то який витонченіший спосіб відключення, щоб гарантувати, що все встигає очиститися після його самоврядування?

Ps В основному використовують CentOS, Ubuntu та Debian.


Я зачекаю, коли хтось ще задзвенить, але це зовсім не правильно. -h просто каже йому перевести систему в режим HALT на відміну від перезавантаження. А "зараз" просто означає, що немає пільгового періоду для користувачів, який потрібно закрити. Не впевнений, що будь-яке з них змінить фактичну поведінку вбивства відключення
Джеффі Сміт

4
Будь ласка, прочитайте сторінку керівництва щодо вимкнення ( man shutdown). Це пояснює це повністю.
Ендрю Шульман

Відповіді:


15

shutdown -h nowподзвонить /etc/rc.d/rcчи /etc/init.d/rc. rcСкрипт буде викликати знищення сценарії для нового рівня виконання (0 для -h, 6 для -r), а потім з допомогою будь-яких стартових скриптів.

Ви побачите S30killprocsабо S00killallабо що - щось подібне , що в залежності від вашого дистрибутива. Це відбувається після того, як були закликані всі скрипти вбивства, щоб спробувати зупинити кожну послугу граціозно по черзі. Спробує kill -15спершу, після чого kill -9.

Коротка відповідь: shutdown -h nowабо shutdown -r nowвитончені. haltі rebootраніше не витончені, але вони просто зателефонують shutdownвам, якщо ви не скористаєтесь цим -fваріантом.


12

Ні, це неправда. shutdownзмінює рівень init, який потім запускає всі сценарії відключення. Що роблять ці сценарії, залежить від сценарію. Але вони зазвичай не завершують процеси, але надсилають їм сигнал до кінця.

Отже, це ручний уривок для 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
Ну, у більшості, якщо не у всіх дистрибутивах, якими я користувався, останнє, що робить сценарій runlevel 6 (перезавантаження) rc - це запустити глобальний кіллалл, щоб вловлювати будь-які затримані або витримані процеси. Але це запускається після завершення всіх нормальних скриптів зупинки.
адаптатор

2
@adaptr Звичайно. Але процеси мали шанс витончено закінчитися. Якщо вони цього не зробили, немає іншої можливості, крім того, щоб їх вбити.
mailq
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.