Найкращий спосіб граціозно перезапустити CentOS?


81

Я завжди використовував команду:

shutdown -r now

Однак іноді це викликає проблеми з MySQL.

Який самий витончений спосіб перезапустити CentOS?

Я бачив:

reboot

і

halt

Як можна акуратно перезавантажити машину?


3
rebootпо суті є псевдонімом shutdown -r... так ... так.
Натан C

Чи відповів мій пост на ваше запитання, чи вам потрібно знати щось інше?
Джоффрі

Тут поки що не можна коментувати, але я хотів тут попередити про перезавантаження. Якщо екземпляр перебуває на Amazon EC2, перезавантаження -h зараз заштрихує екземпляр, тому ніколи цього не робіть. Натомість, якщо вам доведеться вимкнути або перезавантажити, зробіть це через інтернет-інтерфейс Amazon, а не оболонку. Якщо ви зробите цеглу вашим екземпляром, ви можете зупинити його, від'єднати гучність, створити окремий екземпляр і приєднати до нього гучність, не відриваючи перший том, який постачався з новим екземпляром. Тоді вам потрібно буде ssh в новий екземпляр, змонтувати старий том і вийняти файли з нього.
kloddant

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

Відповіді:


92

Немає кращого способу перезапустити сервер, використовуючи що-небудь інше, ніж будь-які ці команди.

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

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

Вимкнення за допомогою сценаріїв init крок за кроком зупиняйте всі ваші послуги, зареєстровані під звичайним рівнем "S". Окремі скрипти init можуть мати тайм-аут, як MySQL-скрипт init у CentOS. Коли буде задано аргумент зупинки і демон не буде відключений протягом досить тривалого часу, сценарій зупиниться і вийде, даючи збій. Процес відключення триватиме так, як ніби нічого не було, лише затримайте трохи довше і, ймовірно, надрукуйте попередження. Зрештою, коли всі скрипти init будуть виконані, відбудеться неминуче: всі процеси, які все ще запущені, отримають SIGTERM сигнал і через кілька секунд (2 або 5) - a SIGKILL. Це дозволить очистити решту до того, як буде здійснено дзвінок ACPI , щоб дійсно перезавантажити або вимкнути систему.

Один виняток - використання rebootкоманди з -fопцією, це буде пропускати виконання сценаріїв init і перезавантажить систему безпосередньо.

Вам буде краще виправити першопричину своїх турбот: MySQL не вимкнеться належним чином.

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


31

Витончене відключення Centos 6.x слід зробити, використовуючи команду як корінь:

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 без джерел чи посилань. Це не корисно в контексті питання; будь-яке програмне забезпечення, яке займає занадто багато часу для виходу, може спричинити проблеми при перезавантаженні (особливо з системою та його агресивними таймаутами).
Харальд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.