В чем разница между «перезапуском службы» и «перезагрузкой службы»


74

Я пытаюсь понять разницу между 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 требует перезагрузки.
Эйдан Мелен


8

Не все службы поддержки reload. Для тех, кто это делает, обычно предпочтительнее перезапуск (т. Е. Перезагрузка приводит к уменьшению времени простоя или его отсутствию)

В Руководстве по политике Debian указывается, что каждый /etc/init.d/сценарий должен поддерживать force-reloadдействие, что означает reload, что служба поддерживает его, а restartслужба не поддерживает перезагрузку.

Я не уверен, как это переводится в современный мир Ubuntu.


1
Руководство по политике Debian было действительно полезной ссылкой, спасибо.
не патч

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

4

Чтобы расширить عبد النور التومي, ответьте с моим опытом работы с systemd.

В systemd всякий раз, когда процесс запускается, он запускается в контексте systemd, наиболее наглядным примером этого являются переменные окружения, определенные в его модульном файле.

Поэтому, когда вы отправляете systemctl reload [someservice]сигнал, он отправляет сигнал службе, чтобы она корректно перезагрузилась, если это поддерживается. Если нет, процесс просто проигнорирует сигнал. Это настраивается, хотя.

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

И если вы сделаете systemctl restart [someservice]это, он скажет systemctl, чтобы служба остановилась, уничтожила текущий контекст systemd, создала новый и снова запустила службу. Это имеет смысл, например, для перезагрузки переменных среды в контексте systemd или если перезагрузка не поддерживается.

Надеюсь, это прояснит немного, и если я ошибаюсь, пожалуйста, дайте мне знать.


0

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

Самый сложный пример, который я могу вспомнить, это что-то вроде Apache. Обычно вы можете просто попросить его перезагрузить, но иногда вам нужно запросить перезагрузку (например, если вы добавляете / удаляете модули).


0

Postgres является хорошим примером для больших различий между перезагрузкой и перезапуском, потому что последним нужно отключить все клиенты базы данных.

когда соединения не должны откатываться, вы можете сначала остановить службу без «--force», используя pg_ctlcluster .

в / etc/postgres/ndomversion automotive/ndomdbname‹/postgresql.conf и на http://www.postgresql.org/docs/manuals/ каждый параметр имеет примечание типа «Этот параметр можно установить только при запуске сервера. "

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