В чем разница между командами останова и выключения?


Ответы:


77

Как правило, используется shutdownкоманда . Это разрешает задержку и предупреждающее сообщение перед выключением или перезагрузкой, что важно для системного администрирования серверов многопользовательской оболочки; это может предоставить пользователям предварительное уведомление о времени простоя.

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

shutdown -h now

Или перезагрузите его с пользовательским предупреждением за 30 минут:

shutdown -r +30 "Planned software upgrades"

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

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

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


Хорошее объяснение!

18
... но сейчас устарел. В операционных системах systemd 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и связанные с ним инструменты, которые люди теперь называют «System 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 не рассматривает режим восстановления (то есть то, что люди systemd переименовали в однопользовательский режим ) как состояние выключенной системы, и он недоступен ни с одной из этих команд. Вариант-меньше так shutdown nowже, как poweroff.

Дальнейшее чтение:

BSDs

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

В 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 System 5 init+rc

Опять же , в этом наборе инструментов противоположность полученной BSD мудрости относится и haltи rebootпросто цепь shutdown- если система уже находится в отключенном питании или остановке «уровни запуска», в этом случае эти команды на самом деле ввести в действие окончательного изменения состояния системы. shutdownв свою очередь цепями к init.

Итак, опять же, нет никакой разницы (если система уже в значительной степени не закрыта) между haltи shutdownпотому, что первое просто вызывает второе. И да, опять же, опция без параметров shutdown now(которая ни одна из halt, rebootили не poweroffможет в конечном итоге вызываться, поскольку все они устанавливают параметры) переводит систему в однопользовательский режим, а не выключает ее.


Вот почему система голосования не работает, когда 80% избирателей
ychaouche

Вы говорите: «Остановка и перезагрузка - это одна отдельная программа; они все еще низкоуровневые, немедленные и радикальные», что, похоже, не так. Я цитирую man-страницу останова из 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 завершается .


Какая разница между остановкой и окончанием ?
Роайма

Это совершенно другая тема, так как здесь речь идет о оффтопе, поэтому я не упомянул об этом. Но вы можете взглянуть на docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
Двим

1
Таким образом, в своем ответе вы говорите, что stop делает то, что говорит, и останавливает экземпляр, в то время как halt (или в вашей альтернативной терминологии завершение ) останавливает экземпляр и удаляет его.
Ройма

Да. Но это специфично для AWS.
dveim

Ах. Понимаю. ОП не предоставил контекст. У вас есть. Благодарю.
Ройма

0

В Linux «halt» и «reboot» являются псевдонимами команды shutdown - shutdown -hи shutdown -rсоответственно. Выключение без слов обычно предполагает -h.


10
Они не aliasesв смысле псевдонимов оболочки, но да, в haltосновном это просто вызовы shutdown -hи rebootзапуск shutdown -r. Обратите внимание, что если вы передадите -fопцию (force) для haltили reboot, shutdownона не вызывается .
Микель

На самом деле, хотя это все еще неправильно, в системных операционных системах описание Шадура здесь ближе к истине, чем исправление Микеля. Там нет "А просто звонит Б". Все они являются альтернативными способами вызова одной единственной программы , как более подробно описано на unix.stackexchange.com/a/196014/5132 .
JdeBP

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

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

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