Яка різниця між "перезавантаженням служби" та "перезавантаженням служби"


73

Я намагаюся зрозуміти різницю між service restart [someservice]і service reload [someservice]. Я розумію, що "перезапуск" перезапускає службу, тоді як "перезавантаження" перезавантажує конфігурацію, але я не розумію практичних наслідків цього достатньо добре, щоб визначити, який я повинен використовувати в заданому контексті.

Приклад: більшість посібників, які я читав для налаштування PostgreSQL, кажуть, що після редагування postgresql.conf та pg_hba.conf я можу видати sudo service postgresql restart. Однак, якби я здогадувався, що використовувати на основі описаного вище, я вибрав би "перезавантажити".

У випадку, якщо це має значення, я перебуваю на Ubuntu 11.10 - хоча я сподіваюся на якомога більш загальноприйнятне пояснення.


2
Пару років тому я працював на сервері з кількома тисячами користувачів. перезапуск Apache не був швидким з будь-якої причини, для перезапуску apache знадобиться близько 3 хвилин (причини). У всякому разі, якби сервер не працював протягом 3 хвилин, мій начальник отримав би близько 800 телефонних дзвінків. З перезавантаженням служби 0 телефонних дзвінків. У цьому різниця.
j0h

Відповіді:


41

Те, що ви сказали, правильно, reloadповідомляє службі перезавантажити свої конфігураційні файли. Це означає, що має бути достатньо для перезавантаження конфігурації; однак можуть існувати певні сервіси, які "не дотримуються правила" або не завантажуватимуть конфігураційні файли. Завдяки цьому вам, мабуть, безпечніше restart. Я особисто не користуюся postgresql, тому не знаю.


1
Тим часом, єreload-or-restart
Suuuehgi

Для PostgreSQL ви можете застосувати зміни до /etc/postgresql/version/main/postgresql.conf з перезавантаженням. Застосування змін до pg_hba.conf вимагає перезавантаження.
Айдан Мелен

63
  • перезапуск = зупинка + початок
  • reload = залишається запущеним + перечитати конфігураційні файли.

8

Не всі служби підтримують reload. Для тих, хто це робить, зазвичай бажано перезапустити (тобто перезавантаження спричиняє менший час простою або взагалі немає).

Посібник з політик Debian визначає, що кожен /etc/init.d/сценарій повинен підтримувати force-reloadдію, що означає, reloadякщо служба підтримує його, і restartякщо служба не підтримує перезавантаження.

Я не впевнений, що це перекладає в сучасний світ Ubuntu upstart.


1
Посібник з політики Debian був дуже корисним посиланням, дякую.
не патч

1
більшість перезавантажень підтримки, якщо не через системну службу, подумав /etc/init.d/SomeProgram reload
j0h

4

Щоб розширити عبد النور التومي відповісти на мій досвід роботи з systemd.

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

Отже, коли ви надсилаєте systemctl reload [someservice]сигнал, він посилає сигнал службі, щоб виграшно перезавантажитись, якщо він підтримується. Якщо ні, процес просто ігнорує сигнал. Це все ж можна налаштувати.

Що я маю на увазі з витончено? запускати нових працівників з новою конфігурацією або кодом і зупиняти старих працівників, коли вони закінчують подавати поточні запити, якщо такі є.

І якщо ви зробите systemctl restart [someservice]це, то скажете systemctl сказати сервісі зупинитися, знищити поточний контекст systemd, створити новий і запустити службу заново. Це має сенс, наприклад, для перезавантаження змінних оточуючих середовищ у системному контексті або якщо перезавантаження не підтримується.

Сподіваюся, це трохи уточнить, і якщо я щось помиляюся, будь ласка, повідомте мене.


0

на даний момент, якщо сервісу потрібні удари (наприклад, змінений файл конфігурації), ви можете повідомити про це, але це призводить до перезавантаження. Було б непогано, якби перезавантаження було зроблено, якщо служба вже запущена (хоча, мабуть, обов'язково є деякі сервіси, для яких потрібні перезавантаження для одних файлів, перезавантаження для інших).

Найскладніший приклад, який я можу придумати, - це щось на кшталт Apache. Зазвичай ви можете просто попросити його перезавантажити, однак іноді замість цього потрібно вимагати перезавантаження (якщо ви додаєте / видаляєте модулі, наприклад).


0

postgres - хороший приклад великих розбіжностей між перезавантаженням та перезавантаженням, оскільки пізніше доводиться відключати всіх клієнтів бази даних.

коли з'єднання не мають відкату, ви можете спочатку припинити послугу без "--force", використовуючи pg_ctlcluster .

у /etc/postgres/{version}/{dbname}/postgresql.conf та на веб- сайті http://www.postgresql.org/docs/manuals/ кожен параметр має зауваження типу "Цей параметр можна встановити лише при запуску сервера. "

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