Яка різниця між перезавантаженням, init 6 та вимкненням -r зараз?


100

Я просто хочу знати різницю між

  • reboot
  • init 6
  • shutdown -r now

а який найбезпечніший і найкращий?


1
Точна поведінка цих трьох команд варіюється від операційної системи до операційної системи.
Thorbjørn Ravn Andersen

Відповіді:


83

Різниці в них немає. Всередині вони роблять точно те саме:

  • rebootвикористовує shutdownкоманду (з перемикачем -r). Команда відключення використовується для вбивства всіх запущених процесів, відключення всіх файлових систем і, нарешті, каже ядру видавати команду живлення ACPI. Джерело можна знайти тут . У старих дистрибутивах команда перезавантаження змушувала процеси виходити, видаючи SIGKILLсигнал (все ще знайдений у джерелах, можна викликати -fопцію), у більшості останніх дистрибутивів він налаштовується на більш витончені та непомітні init 1 -> shutdown -r. Це гарантує, що демони очищаються перед відключенням.

  • init 6повідомляє initпроцесу вимкнути всі породжені процеси / демон, як записано у файлах init (у зворотному порядку, який вони почали), і нарешті викликає shutdown -r nowкоманду перезавантажити машину

Сьогодні немає великої різниці, оскільки обидві команди роблять точно так само, і вони поважають скрипти init, які використовуються для запуску служб / демонів, викликаючи скрипти для вимкнення для них. За винятком reboot -f -r nowзазначеного нижче

Існує невелике пояснення, взяте з керівників, чому reboot -fце не безпечно:

  -f, - сила
    Примушуйте негайно зупинити, вимкнути живлення, перезавантажити. Не звертайтеся до системи init.

Редагувати:

Забув згадати, у майбутніх дистрибутивах RHEL ви повинні використовувати нову systemctlкоманду для видачі потужності / перезавантаження. Як вказується в сторінках керівництва про rebootі shutdownвони «спадщині команда доступна тільки для сумісності.» і systemctlметод буде єдиним безпечним.


Іноді моя перезавантаження зависає у SIGTERM, чи є спосіб дізнатись, чому, а також є спосіб вичерпати перезавантаження, таким чином, якщо це займе занадто довго, воно змусить перезавантажити?
CMCDragonkai

2
Ці версії RHEL вже не "майбутні". ☺ Як детальніше пояснено на unix.stackexchange.com/a/196014/5132 , у таких системних операційних системах взагалі немає різниці. Вони навіть не різні програми.
JdeBP

Ви друкували, кажучи init 1 -> shutdown -r?
deed02392

Ваше посилання розірвано.
хтознає

8

Відключення є кращим, оскільки воно дозволяє вказати причину кардинальних дій - те, що ви завжди повинні робити. Повідомлення буде записано в журнал (и) для нащадків. Наприклад:

shutdown -r now 'Kernel upgrade requires reboot'

Ви також можете виконати заплановану перезавантаження - вказавши щось інше, ніж nowчас перезавантаження:

shutdown -r 22:00 'Work around kernel memory leak'

Тоді ваші користувачі отримуватимуть періодичні нагадування, щоб вийти з часом, процес буде більш впорядкованим та професійним.


5

На традиційних Юнікси, rebootі shutdown -r nowце абсолютно різні команди. За типового використання rebootбезпечно використовувати лише в режимі одиночного користувача.

shutdown -r nowє канонічним методом відключення різних * nix і безпечнішим у використанні в цілому і є функціонально еквівалентним init 6.

перезавантажити init (8) (8)


4

У FreeBSD є різниця між rebootта shutdown -r now. На rebootчоловіковій сторінці:

Зазвичай утиліта shutdown (8) використовується тоді, коли систему потрібно зупинити або перезапустити, даючи користувачам попереднє попередження про їхню приреченість і чітко припиняючи конкретні програми.


1
Це не BSD-питання, однак, як свідчить тег на запитання та використання запущеного рівня System 5 в одній із команд. ☺
JdeBP

1
Я знаю, що це питання Linux. Я подумав, що комусь може бути корисним знати, що в деяких інших системах це різниця.
Marián Černý
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.