Чтение "В чем разница между командами остановки и выключения?" Я обычно имею представление о том, что делает команда shutdown, с опциями -h / -r или без них.
Команда "halt" выполняет отключение системы до уровня 0 системы.
Команда «shutdown» выполняет выключение системы для запуска уровня 1 без команды -h или -r.
А как насчет команды "poweroff", которая входит в уровень выполнения 0 или 1? Это единственное основное различие между этими тремя командами?
Ответы:
А теперь системный ответ.
В соответствии с тегом вашего вопроса вы используете Red Hat Enterprise Linux. Начиная с версии 7, он использовал systemd. Ни один из других ответов не верен для мира systemd; и даже не некоторые из предположений в вашем вопросе.
halt
команды из Ван Смуренбурга утилиты "Система 5"init
./sbin/halt
являются символической ссылкой на/sbin/reboot
; это не так с systemd. Там нет отдельнойreboot
программы вообще.halt
илиreboot
вызываютshutdown
программу с аргументами командной строки; они также не верны с systemd. Там нет отдельнойshutdown
программы вообще.Каждый набор инструментов для управления системой имеет свою версию этих утилит. Systemd, выскочка, перекус , ван Smoorenburg
init
и BSDinit
все имеют свои собственныеhalt
,poweroff
и так далее. На каждой их механика немного отличается. Как и их справочные страницы.В Systemd набор инструментов
halt
,poweroff
,reboot
,telinit
, иshutdown
являются все символические ссылки/bin/systemctl
. Они все регулировочные шайбы с обратной совместимостью, которые просто сокращение для вызова интерфейса первичного командной строки Systemd в:systemctl
. Они все на карте (и на самом деле являются) той же одной программе. (По соглашению оболочка сообщает ему, по какому имени она была вызвана.)цели, а не уровни выполнения
Большинство из этих команд являются сокращениями для сообщения systemd, используя
systemctl
для выделения конкретной цели . Изоляция объяснена наsystemctl
странице руководства (см. В разделе qv), но для целей этого ответа ее можно рассматривать как начало цели и остановку любых других. Стандартные цели, используемые в systemd, перечислены наsystemd.special
странице руководства (8).Диаграммы на
bootup
странице руководства (7) в наборе инструментов systemd, в частности на последней, показывают, что здесь есть три «конечные» цели:halt.target
- Как только система достигнет состояния полной изоляции этой цели, она вызоветreboot(RB_HALT_SYSTEM)
системный вызов. Ядро попытается войти в программу монитора ПЗУ или просто остановит ЦП (используя любой подходящий для этого механизм).reboot.target
- Как только система достигнет состояния полной изоляции этой цели, она вызоветreboot(RB_AUTOBOOT)
системный вызов (или эквивалент магической командной строки). Ядро попытается запустить перезагрузку.poweroff.target
- Как только система достигнет состояния полной изоляции этой цели, она вызоветreboot(RB_POWER_OFF)
системный вызов. Ядро будет пытаться отключить питание системы, если это возможно.Это то , о чем вы должны думать, как о конечной системе, а не о прохождении уровней. Обратите внимание на диаграмму, что целевая система systemd сама кодирует вещи, которые в других системах являются неявными, а не явными: например, представление о том, что каждая из этих конечных целей охватывает
shutdown.target
цель, так что описываются службы, которые должны быть остановлены перед выключением имея их в конфликт с кshutdown.target
цели.systemctl
пытается отправить запросы,systemd-logind
когда вызывающий пользователь не является суперпользователем. Он также передает отложенные отключения наsystemd-shutdownd
. И некоторые сокращения вызываютwall
уведомления. Помимо тех сложностей, которые могут сделать этот ответ в несколько раз длиннее, если вы в данный момент являетесь суперпользователем и не запрашиваете запланированное действие:systemctl isolate halt.target
имеет короткие номера:shutdown -H now
systemctl halt
halt
systemctl isolate reboot.target
имеет короткие номера:shutdown -r now
telinit 6
systemctl reboot
reboot
systemctl isolate poweroff.target
имеет короткие номера:shutdown -P now
telinit 0
shutdown now
systemctl poweroff
poweroff
systemctl isolate rescue.target
имеет короткие номера:telinit 1
systemctl rescue
systemctl isolate multi-user.target
имеет короткие номера:telinit 2
telinit 3
telinit 4
systemctl isolate graphical.target
имеет стенографию:telinit 5
После анализа различных синтаксисов командной строки все они в конечном итоге оказываются в одних и тех же путях кода внутри
systemctl
программы.Примечания:
shutdown now
заключается в переключении в однопользовательский режим . Это не так с systemd.rescue.target
- однопользовательский режим переименовывается в режим восстановления в systemd - недоступен с помощьюshutdown
команды.telinit
действительно полностью игнорирует все те и символические ссылки в файловой системе, которые описаны на страницах руководства. Вышеуказанные отображения встроены в программу в виде таблицы.runlevelN.target
default.target
systemctl
--force
Вариант кhalt
,reboot
иpoweroff
команды так же , как говорят--force --force
вsystemctl halt
,systemctl reboot
иsystemctl poweroff
команду. Это заставляетsystemctl
пытаться позвонитьreboot()
напрямую. Обычно он просто пытается изолировать цели.telinit
это не то же самое, чтоinit
. Это разные программы в мире systemd, последнее - другое названиеsystemd
программы, а неsystemctl
программы.systemd
Программа не обязательно скомпилирован с любой совместимостью ван Smoorenburg на всех, и на некоторых операционных системах Systemd жалуется на время вызова неправильно , если один попыток .init N
дальнейшее чтение
systemctl
, Системные справочные страницы. freedesktop.org.systemd.special
, Системные справочные страницы. freedesktop.org.bootup
, Системные справочные страницы. freedesktop.org.init
, Руководство Nosh . Softwares.источник
systemctl reboot
должны быть эквивалентныsystemctl start reboot.target --job-mode=replace-irreversible
. Использование любого другого режима работы менее надежно. unix.stackexchange.com/questions/381739/…systemctl reboot
, кinit 6
которому я пришел, - это «безопасный» способ перезагрузки, например, каким способом мы могли бы в противном случае перезагрузить систему?halt
дает команду оборудованию остановить все функции процессора , но оставляет его включенным. Обычно это означает, что кто-то должен перезагрузить или выключить машину вручную, нажав кнопку питания впоследствии. Конкретный способ достижения этого зависит от архитектуры, но, например, набор команд x86 предоставляетHLT
инструкции, которые останавливают центральный процессор (ЦП), пока не сработает следующее внешнее прерывание.poweroff
Напримерhalt
, останавливает процессор, но также посылает аппаратный сигнал ACPI, который дает команду системе начать полное и немедленное отключение. Это примерно эквивалентно нажатию кнопки питания на обычном настольном компьютере.Как
halt
иpoweroff
обычно символические ссылки наreboot
исполняемый файл, который, как правило , ссылаться наshutdown
инструменте с соответствующими аргументами (-h
,-P
илиr
) в зависимости от того, еслиhalt
,poweroff
илиreboot
используются для вызова инструмента. Однако при--force
передаче этой опцииreboot
или при уровне выполнения 0 или 6 системный вызовreboot
будет вызванreboot()
соответствующим кодом самой команды.источник
/sbin/init 0
или/sbin/telinit 0
должно совпадать с остановкой системы, хотя конкретные шаги будут зависеть от рассматриваемой системы инициализации, такой как System-V init , upstart или systemd . Если вы используете RHEL, вы будете использовать systemd.halt
,poweroff
Иshutdown -h
полностью эквивалентны. На самом деле остановка и отключение питания делают только коллshutdown -h
. Из справочной страницы:Выключение затем завершает работу системы, переключаясь на уровень выполнения 0.
Останов и отключение питания (и перезагрузка) выполняют двойную роль; при выполнении в процессе выключения (т. е. на уровне выполнения 0 или 6) они выполняют низкоуровневые операции, необходимые для физической остановки, выключения или перезагрузки машины, как описано в другом ответе.
источник