Яка різниця між командами Halt і Shutdown?


Відповіді:


77

Як правило, користується shutdownкомандою . Це дозволяє затримати час та попереджати повідомлення перед вимкненням або перезавантаженням, що важливо для системного адміністрування багатокористувацьких серверів оболонки; він може надати користувачам попереднє повідомлення про час простою.

Таким чином, команду відключення потрібно використовувати так, щоб негайно зупинити / вимкнути комп'ютер (як мінімум на Linux та FreeBSD):

shutdown -h now

Або перезавантажити його за допомогою спеціального попереднього попередження за 30 хвилин:

shutdown -r +30 "Planned software upgrades"

Після затримки shutdownповідомляє initпро зміну до рівня запуску 0 (зупинка) або 6 (перезавантаження). (Зауважте, що пропуск -hабо -rпризведе до того, що система перейде в режим однокористувача (runlevel 1), що вбиває більшість системних процесів, але насправді не зупиняє систему; вона все ще дозволяє адміністратору залишатися ввійшли в систему як root.)

Після того, як системні процеси були вбиті і файлові системи були відключені, система зупиняється / вимикається або перезавантажується автоматично. Це робиться з допомогою haltабо rebootкоманди , яка синхронізує зміни в диски , а потім виконує фактичну HALT / вимикання або перезавантаження харчування.

У Linux, якщо haltабо rebootзапускається, коли система ще не почала процес відключення, вона буде викликати shutdownкоманду автоматично, а не безпосередньо виконувати призначені дії. Однак у таких системах, як FreeBSD , ці команди спочатку заносять дію, wtmpа потім негайно виконають зупинку / перезавантаження, без попереднього вбивства процесів чи демонтажу файлових систем.


Гарне пояснення!

18
… Але тепер застаріла. У системних операційних системах Linux ці команди існують (на словах systemd doco) "лише для сумісності". Там не розділені halt, rebootі shutdownпрограми , які викликають один одного. Є одна єдина програма з великою кількістю аналізаторів командного рядка, які переходять у один кодовий шлях всередині. Також немає рівнів запуску. Також вимкнення не переходить в режим єдиного користувача. Дійсно, сам режим користування перейменований. Докладніше див. Unix.stackexchange.com/a/196014/5132 .
JdeBP

49

Минуле

У 1980-х роках BSDs було halt, rebootі shutdown. Система 5 UNIX мала набір інструментів сумісності BSD. Але споконвічно вона мала свою, іншу shutdownкоманду; і не мали haltабо rebootвзагалі. (У деяких варіантах System 5 були такі речі, як SCO XENIX haltsys.)

BSD haltі rebootкоманди були низькорівневими, різкими і негайними. Уважним чином , щоб вимкнути систему BSD була shutdownкоманда, яка зробила все те , що один очікує траплятися: wallповідомлення для користувачів, послуги витончено убитий, записи , написані лаг, логіни відключені, і так далі.

У той час як BSD були значною мірою там, де отримана мудрість походить " shutdownexecs halt/ reboot", і що останні повинні використовуватися з обережністю; Це був світ System 5, де люди засвоїли протилежну звичку, що halt/ rebootбули просто зручними скороченнями і нічого більше: /usr/ucb/haltз "Пакету сумісності BSD", це не мало нічого іншого по суті shutdown -h. Вони обоє закінчилися робити init 0.

Подальше читання

Сьогодні

На сьогоднішній день у нас є низка можливих наборів інструментів управління системою. У BSD все ще є набір інструментів, хоча і очищений від будь-яких можливих AT & Tism в 1990-х. Мікель ван Смооренбург у 1992 році (пере-) написав Linux init+ rcта пов'язані з ними інструменти, які зараз люди називають «Система 5 init», хоча це насправді не програмне забезпечення від UNIX System 5 (і це не просто init). Там також Systemd , вискочка , і перекус , кожен з яких має свої власні реалізації з halt, reboot, fasthalt, fastbootі так далі.

Набори інструментів також зростали та змінювалися. Зараз poweroffв операційних системах 1980-х років команда відсутня, оскільки центральні процесори на більшості сучасних машин не мали можливості контролювати джерела живлення. Набори інструментів Linux, зокрема, мали команди BSD; але, як і інструменти сумісності BSD в UNIX System 5, вони не є точними робочими силами, і все значною мірою згладжено.

Це уплощение призвело нас до точки , де haltі shutdownзнаходяться в основному те ж саме. Але точні деталі різняться від набору інструментів до набору інструментів, і механіка кожного набору інструментів трохи відрізняється.

Він також навів нас до трохи незручному положенню , в якому ця команді набір став настільки схиблений варіантами сумісності , що тепер дозволяє людям дати комп'ютерів самостійно суперечливі інструкції , як reboot --haltі poweroff --reboot, як я помітив на сторінці керівництва для Nosh halt, fasthalt, reboot, fastboot, і poweroffкоманди. ☺

Набір системних інструментів

halt, reboot, poweroff, telinit, І shutdownце все одна програма . Це насправді власна systemctlпрограма systemd . У ньому є кілька аналізаторів командного рядка для різних синтаксисів командних рядків цих команд, а також їх власних, але після цього значною мірою перетворюється на один шлях коду всередині. Немає різниці між використанням haltта його командними параметрами для запуску дії та використанням shutdownта параметрами її команд для запуску тієї самої дії.

systemd не вважає режим порятунку (саме те, що систематизовані люди перейменували в режим єдиного користувача ), не працює в режимі вимкнення, і він не доступний жодній із цих команд. Без варіантів shutdown now- те саме, що poweroff.

Подальше читання:

BSD

BSD значною мірою зберігають свою семантику 1980-х років. haltі shutdown, отже, дуже не еквівалентні у своїх наборах інструментів. haltі rebootє однією єдиною програмою; і все ще низький рівень, негайний і різкий. Беручи під увагу , shutdownі poweroff, також однієї програми, зробити все благорассудітельние речі , як заплановане вимкнення, написання wallповідомлень, протоколювання дій, виводячи з ладу входу, і так далі.

У наборах інструментів BSD shutdown/ poweroffтрадиційно закінчується викликом halt/ rebootдля прийняття остаточної зміни стану системи. (Часто в даний час некоректне) отримав мудрість, що " shutdownexecs halt/ reboot" насправді все ще належить до NetBSD та OpenBSD. Але на FreeBSD / TrueOS / DragonFlyBSD справа лише в тому випадку, якщо використовується -oопція. На цих BSDs, і з цих програм зазвичай прийняти остаточне зміна стану системи шляхом передачі різних сигналів ( INT, USR1і USR2) для обробки # 1. initчи працює все управління державою в цих системах.

На всіх з них, варіант менш shutdown nowне є еквівалентною будь-який з halt, rebootабо poweroff. Він переходить у режим єдиного користувача BSD , з якого можна перейти назад до багатокористувацького режиму .

Подальше читання:

  • shutdown. Посібник із системного менеджера . Сторінки посібника NetBSD. 2011-11-04.
  • reboot,halt . Сторінки керівництва OpenBSD. 2016-09-03.
  • shutdown. Сторінки посібника FreeBSD. 2016-09-21.
  • reboot, halt, fastboot,fasthalt . Сторінки посібника FreeBSD. 2017-03-19.
  • shutdown. Посібник із системного менеджера . Сторінки керівництва DragonFlyBSD. 2016-09-29.
  • reboot, halt, fastboot,fasthalt . Посібник із системного менеджера . Сторінки керівництва DragonFlyBSD. 2016-09-29.

Нічний набір інструментів

У Nosh управління системою набору інструментів, halt, fasthalt, poweroff, fastpoweroff, reboot, і fastbootвсе одна програма. Це зворотний хід сумісності, який зазвичай просто прив’язується до нього shutdown, протилежний отриманій мудрості. --forceВаріант робить ланцюг system-controlзамість цього.

Таким чином, --forceміж цією haltкомандою та shutdownкомандою (з еквівалентною опцією) у цьому наборі інструментів немає різниці (відсутня ) , оскільки цей набір команд "сумісність BSD / System 5" - це просто тонкий прошарок у верхній частині shutdown.

Подальше читання:

Набір інструментів на початку

Як і у випадку з nosh, у наборі інструментів управління на початку системи застосовується протилежна отриманій мудрості BSD. halt,, rebootі poweroffвсі вони є однією програмою, яка зазвичай ланцюжок shutdown; якщо не використовується --forceпараметр, що змушує reboot()систему робити сам виклик.

Отже, знову ж таки, немає різниці (відсутня --force) між haltкомандою та shutdownкомандою (з еквівалентною опцією) у цьому наборі інструментів. Знову ж таки, без опцій shutdown now(які жоден із halt, rebootабо не poweroffможе закінчитися викликом, оскільки всі встановлені параметри) приводить систему в єдиний користувацький режим, а не вимикає її.

Подальше читання:

  • Скотт Джеймс Залишок. shutdown(8) . Сторінки керівництва Ubuntu.
  • Скотт Джеймс Залишок. reboot(8), halt(8), poweroff(8) . Сторінки керівництва Ubuntu.

Система Linux 5 init+ rcнабір інструментів

Знову ж таки, в цьому наборі інструментів застосовується протилежна отримана мудрість BSD haltі rebootпросто ланцюг на shutdown- якщо тільки система вже не працює або не зупинить "запущені рівні", і в цьому випадку ці команди фактично вводять остаточну зміну стану системи. shutdownсвоєю чергою прикуває до init.

Отже, знову ж таки, різниці немає (якщо система вже значною мірою не вимкнута) між haltі shutdownтому, що перший просто викликає останній. І так, знову ж таки, без варіантів shutdown now(які жоден із halt, rebootабо poweroffможе закінчитися викликом, оскільки всі встановлені параметри) приводять систему в єдиний користувальницький режим, а не вимикають її.


Ось чому система голосування не працює, коли 80% виборців
ychaouche

Ви кажете, що: "зупинка та перезавантаження - це одна єдина програма; вони все ще низькі, негайні та різкі", що, здається, не так. Я цитую сторінку людини halt з dragonflyBSD, яка говорить: Утиліти зупинки та перезавантаження видаляють кеш файлової системи на диск, надсилають всі запущені процеси SIGTERM (а згодом і SIGKILL) і, відповідно, зупиняють або перезапускають систему. Дія реєструється, включаючи введення запису відключення у файл wtmp (5). Дивіться: dragonflybsd.org/cgi/web-man?command=halt§ion=ANY
ychaouche

Тепер перейдіть і прочитайте відповідь ще раз для вже чітко даного (вдвічі більше) набору речей, які не знаходяться в цьому списку; той, який також прописаний у різних посібниках системного адміністратора BSD.
JdeBP

який список @JdeBP?
ychaouche

11

Я підозрюю, що це дещо залежить від того, яку версію UNIX / Linux ви використовуєте. У Centos (і я очікую інших сучасних Linux) зупиняйте виклики (за умови, що ви не на рівні 0 або 6), так що ваша система буде закрита. На Solaris 10 зупинка є більш жорстокою, вона просто вимиває кешові диски та відключає повноваження системи - не робиться спроб запустити будь-які сценарії чи вимкнути SMF- засоби.


2

Для тих, хто використовує AWS EC2: на AWS shutdown зупиняє екземпляр, коли він halt припиняє його.


Яка різниця між зупинкою та припиненням ?
roaima

Це зовсім інша тема, перебуваючи тут поза версією, тому я її не згадував. Але ви можете подивитися на docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
dveim

1
Отже, у своїй відповіді ви говорите, що stop виконує те, що сказано, і зупиняє екземпляр, тоді як зупинка (або у вашій альтернативній термінології припиняє ) зупиняє примірник і видаляє його.
roaima

Так. Але це специфічно для AWS.
двеім

Ага. Я бачу. ОП не надала контексту. Ти маєш. Дякую.
roaima

0

У Linux «привал» і «перезавантаження» є псевдонімами команди виключення - shutdown -hі shutdown -rвідповідно. Відключення Bareword зазвичай передбачає -h.


10
Вони не aliasesв сенсі псевдонімів оболонки, але так, в haltосновному це лише дзвінки shutdown -hта rebootзапуски shutdown -r. Зауважте, що якщо ви передаєте -fпараметр (сила) до haltабо reboot, не викликається. shutdown
Мікель

Насправді, хоча це все ще неправильно, в системних операційних системах опис Шадура тут ближче до істини, ніж виправлення Мікеля. Немає "A just call B". Всі вони є альтернативними способами виклику однієї програми , як детальніше пояснено на unix.stackexchange.com/a/196014/5132 .
JdeBP

@JdeBP Назад, коли я писав, цей systemd був менше року, і я ніколи про нього навіть не чув, розум. :)
Шадур

1
@JdeBP Я б прирівнював їх до, скажімо, sendmailкоманди до цього моменту - Як і у MTA, це насправді не має значення, яку систему init ви використовуєте, тому що всі вони розпізнають shutdownі haltяк таку.
Шадур

1
Насправді це має значення; тому що між наборами інструментів існують тонкі, і справді непомітні, відмінності. Як не дивно, так і в sendmailкоманді. Це як sendmailкоманда, але не так, як ви думаєте.
JdeBP
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.