Как мне переименовать хост Linux, не перезагружая его, чтобы переименование вступило в силу?

Я искал ответ на этот вопрос на serverfault и не смог его найти. Я знаю, что это возможно, но не могу вспомнить, как это сделать. Как мне изменить имя хоста Linux и заставить это изменение вступить в силу без перезагрузки?

Я использую Ubuntu 16 и Ubuntu 18.

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

Я знаю, что для переименования хоста я редактирую файлы:

  • / etc / hostname
  • / etc / hosts

В / etc / hostname один просто заменяет текущее имя хоста (которое вскоре станет прежним именем хоста) новым именем хоста.

Ubuntu в файле / etc / hosts содержит строку:

127.0.1.1 your-hostname your-hostname

Он действует как начальная загрузка, пока ваш хост загружается и устанавливается в вашей сети. Перед изменением имени хоста your-hostname является текущим (вскоре станет прежним именем хоста), и в рамках изменения имени хоста вашего хоста его заменяют новым именем.

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

Как я могу изменить имя хоста на хосте и заставить это изменение вступить в силу без перезагрузки хоста?

26
задан 29 March 2019 в 00:20
2 ответа

Вы можете изменить представление ядра об имени хоста в systemd-система, основанная на использовании инструмента hostnamectl . Например:

hostnamectl set-hostname whatever

Вы можете просмотреть текущее представление системы об имени хоста с помощью:

hostnamectl             # equivalent to hostnamectl status

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

49
ответ дан 28 November 2019 в 20:07

Вы можете изменить имя хоста в ядре, используя:

hostname NEWNAME

В Linux это практически равно одному из следующих значений:

sysctl kernel.hostname=NEWNAME

echo NEWNAME > /proc/sys/kernel/hostname

Это не зависит от systemd (в отличие от hostnamectl , который требует systemd-host named) или любых других нестандартных инструментов, и часто (особенно в системах shellscript-init) именно так изначально было задано начальное имя хоста.

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

(Некоторые программы кэшируют имя хоста до перезапуска, другие запрашивают его каждый раз, когда он им нужен. Программы также могут опрашивать ( 2) / proc / sys / kernel / hostname для получения уведомлений об изменениях, но немногие из них.)

22
ответ дан 28 November 2019 в 20:07

Теги

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