Лучший способ изящно перезапустить CentOS?


82

Я всегда использовал команду:

shutdown -r now

Однако иногда это вызывает проблемы с MySQL.

Какой самый изящный способ перезапустить CentOS?

Я видел:

reboot

а также

halt

Как я могу аккуратно перезагрузить машину?


3
rebootпо сути это псевдоним shutdown -r... так ... да.
Натан С,

Мой пост ответил на ваш вопрос, или вам нужно знать что-нибудь еще?
Джоффри

Пока не могу комментировать, но я хотел разместить здесь предупреждение о перезагрузке. Если экземпляр находится на Amazon EC2, перезагрузка -h теперь приведет к обнулению экземпляра, поэтому никогда не делайте этого. Вместо этого, если вам необходимо завершить работу или перезагрузить компьютер, сделайте это через онлайн-интерфейс Amazon, а не через оболочку. Если вы сделаете кирпич для своего экземпляра, вы можете остановить его, отсоединить том, создать отдельный экземпляр и присоединить к нему том, не отсоединяя первый том, поставляемый с новым экземпляром. Затем вам нужно будет подключиться к новому экземпляру, смонтировать старый том и получить с него файлы.
Клоддант

на самом деле, вы хотите запустить sync: sync;перед запуском, shutdown -rчтобы все файловые операции ввода / вывода были синхронизированы. Я подозреваю, что это также прояснит проблему сmysql
user3629249

Ответы:


96

Нет лучшего способа перезапустить ваш сервер, используя что-либо, кроме этих команд.

  • выключение - самый распространенный способ остановить вашу систему. Добавление аргумента -rи определенного времени (или ' now') перезагрузит вашу систему, а не остановит ее после завершения работы.
  • перезагрузка - это завершение работы оболочки, которая выполняет обслуживание жесткого диска (синхронизация и / или перевод в режим ожидания, что не очень актуально).
  • Новые версии reboot(> 2.74) будут запущены, shutdownесли не на уровне выполнения 0 или 6.
  • Большинство сценариев инициализации вызывают halt, чтобы войти в utmp .

В современных дистрибутивах будут рассмотрены все задачи независимо от того, какую команду вы используете. По сути, все они инициируют время выполнения ваших сценариев SysV (CentOS <7) или systemd (CentOS> = 7) (я буду называть их сценариями init для простоты чтения).

Завершение работы с помощью сценариев инициализации шаг за шагом останавливает все ваши службы, зарегистрированные под обычно уровнем запуска 'S'. Индивидуальные сценарии инициализации могут иметь время ожидания, как сценарий инициализации MySQL в CentOS. Когда задан аргумент stop и демон не будет отключен в течение достаточного количества времени, сценарий остановится и завершится, что приведет к ошибке. Процесс выключения будет продолжаться, как будто ничего не случилось, только займет немного больше времени и, вероятно, напечатает предупреждение. В конце, когда все сценарии инициализации будут выполнены, произойдет неизбежное: все процессы, которые все еще работают, получат SIGTERM сигнал и через несколько секунд (2 или 5), a SIGKILL. Это очистит все остальное до того, как будет сделан вызов ACPI, чтобы действительно перезагрузить или завершить работу вашей системы.

Единственное исключение - использование rebootкоманды с -fпараметром, это пропустит выполнение сценариев инициализации и перезагрузит систему напрямую.

Вам будет лучше устранить основную причину ваших забот: MySQL не завершает свою работу должным образом.

Часто это происходит из-за огромного объема работы, которую необходимо выполнить, прежде чем можно будет безопасно выйти из демона. Однажды у меня был экземпляр MySQL с таблицами +300.000, на выход которого ушло более часа. Подобные проблемы могут быть обнаружены в системах, использующих огромные буферы и редкую доступность ввода / вывода.


31

Для корректного завершения работы Centos 6.x следует использовать команду от имени root:

shutdown -h now

Это попытается остановить все запущенные службы, прежде чем корректно завершить работу сервера.

Использование этой команды также предотвращает проблемы с сокетом mySQL.

Точно так же для изящной перезагрузки:

reboot -h now

Вы можете прочитать предыдущий ответ о подобном вопросе здесь:

https://stackoverflow.com/questions/20407292/centos-another-mysql-daemon-already-running-with-the-same-unix-socket


7
Я думаю, что вы имеете в виду shutdown -r now, или, возможно, просто reboot. У rebootкоманды нет -hопции.
Майкл Хэмптон

1
Привет, Майкл, Centos 6.x действительно имеет возможность остановить службы перед перезагрузкой. «shutdown -h now» - это корректное завершение работы, а «reboot -h now» - это грациозная перезагрузка. Попробуйте это на своем сервере Centos ...
GeckoSEO

1
Ой? И что делает этот -hвариант? Это не на странице руководства.
Майкл Хэмптон

2
В самом деле? У вас есть документация для этого? Потому что, во-первых, это то, что rebootобходится без -h . Во-вторых, насколько я могу судить, это вообще не документировано.
Майкл Хэмптон

2
В документе, который вы только что связали, указано, что именно я вам говорил! rebootне имеет -hвыбора, shutdownделает.
Майкл Хэмптон

2

Давая удаленные инструкции конечным пользователям и клиентам, я инструктирую их использовать poweroffдля выключения и выключения системы.

Если им нужна горячая перезагрузка, я предлагаю использовать rebootкоманду.

Я полагаю, что можно сказать, что выпускCtrl-Alt-Delete также выполняет это;)


Я не согласен с этим ответом. перезагрузка и завершение работы (Ctrl-Alt-Delete) являются принудительными и могут в некоторых средах, например, в тех, которые работают под управлением MySQL, вызывать «блокировку» сокета, которая затем требует создания нового сокета или удаления / перемещения существующего сокета перед воссозданием нового один.
GeckoSEO

1
@GeckoSEO Это было шутливое предложение, касающееся опасности включения Ctrl-Alt-Delete на серверах Linux.
ewwhite

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

2

Я использую команду «init 6».

init 6 говорит процессу init отключить все порожденные процессы / демоны, как записано в файлах init (в обратном порядке, в котором они были запущены), и, наконец, вызвать команду shutdown -r now для перезагрузки компьютера.

Более подробную информацию можно найти по этому вопросу .


0

Я чувствую, что вам может не понравиться этот ответ, но этот ответ включает в себя некоторые идеи, которые другие не рассматривают. , , Ты пишешь:

Я всегда использовал команду:

выключение -r сейчас

Однако иногда это вызывает проблемы с MySQL.

Проблема здесь НЕ в вашем методе выключения, а в том программном обеспечении, которое не может правильно справиться с выключением; MySql.

Единственный способ действительно решить эту проблему - заменить MySql (PostgreSql - отличная замена) ИЛИ написать свой собственный скрипт выключения, который ПЕРВЫЙ балует MySql, как ребенок, и когда он счастлив, что его закрывают, ТО выключает систему.

... Как человек, который специализируется на системах баз данных более 26 лет, я могу вам сказать, что только в очень недавние времена MySql начал действовать в отношении компетентности в наиболее важных аспектах систем баз данных. для - безопасность / целостность данных. Раньше они обращали меньше внимания на эти аспекты и больше внимания на производительность. Но что хорошего в отличной производительности, если вы потеряете данные? В НЕКОТОРЫХ приложениях, таких как, скажем, потоковая запись видео Netflix, в какой момент вы просматриваете, абсолютная точность может не иметь особого значения - может быть, даже ваши клиенты НРАВИТСЯ, что видео немного копируется после сбоя. Но в банковской системе это катастрофа эпических масштабов. Только владелец данных может знать, что им подходит.


1
Замените mysql только из-за проблем при перезапуске или выключении системы? И последняя часть решения ничего не дает для решения проблемы человека, который задает вопрос
ftrujillo

Этот ответ смещен на MySQL без источников и ссылок. Это не полезно в контексте вопроса; любое программное обеспечение, для выхода которого требуется слишком много времени, может вызвать проблемы при перезагрузке (особенно при использовании systemd и его агрессивных таймаутах).
Харальд
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.