В чем разница между & ldquo; перезапуском службы & rdquo; и & ldquo; перезагрузка службы & rdquo;

Я пытаюсь понять разницу между service restart [someservice] и service reload [someservice]. Я понимаю, что «перезапуск» перезапускает службу, тогда как «перезагрузка» перезагружает конфигурацию, но я недостаточно хорошо понимаю практические последствия этого, чтобы определить, что мне следует использовать в данном контексте.

Пример: большинство руководств, которые я читал для настройки PostgreSQL, говорят, что, как только я отредактировал postgresql.conf и pg_hba.conf, чтобы разрешить удаленные подключения, я должен выпустить sudo service postgresql restart. Однако, если бы я угадывал, какой из них использовать на основе приведенного выше описания, я бы выбрал «перезагрузить».

В случае, если это имеет значение, я нахожусь на Ubuntu 11.10 - хотя я надеюсь, что объяснение будет в общем применимо, насколько это возможно.

74
задан 19 February 2012 в 00:54

7 ответов

То, что вы сказали правильно, reload сообщает службе перезагрузить свои файлы конфигурации. Это означает, что должно быть достаточно перезагрузить конфигурацию; однако могут быть определенные службы, которые «не следуют правилу» или не будут перезагружать файлы конфигурации. Из-за этого вы, вероятно, в большей безопасности с restart. Лично я не пользуюсь postgresql, поэтому не знаю.

0
ответ дан 19 February 2012 в 00:54

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

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

0
ответ дан 19 February 2012 в 00:54

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

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

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

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

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

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

0
ответ дан 19 February 2012 в 00:54

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

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

в / etc / postgres / {version} / {dbname} /postgresql.conf и в http://www.postgresql.org/docs/manuals/ каждый параметр есть замечание типа «Этот параметр может быть установлен только при запуске сервера».

0
ответ дан 19 February 2012 в 00:54
  • перезагрузка = остановка + запуск
  • перезагрузка = продолжить работу + перечитать файлы конфигурации.
0
ответ дан 19 February 2012 в 00:54

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

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

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

0
ответ дан 19 February 2012 в 00:54

Деталь сигнала может быть важна для перезагрузки.
В большинстве случаев все сводится к отправке правильного сигнала (SIGHUP) процессу обслуживания. Если базовое приложение имеет какую-то стратегию «повторного применения конфигурации в реальном времени», то, скорее всего, в файле служебной единицы должна быть строка, начинающаяся с «ExecReload =». Это означает, что перезагрузка не является обязательной, и вам нужно проверить, реализует ли приложение перезагрузку: (например, докер)

cat $(echo $(systemctl show -p FragmentPath docker) | cut -d "=" -f 2)

Перезагрузка - это просто стоп-старт. Systemd нужно только знать правильную команду «ExecStart» для запуска.

1
ответ дан 24 March 2020 в 00:54

Другие вопросы по тегам:

Похожие вопросы: