Назад | Перейти на главную страницу

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

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

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

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

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

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

Ubuntu в /etc/hosts в файле есть строка:

127.0.1.1 your-hostname your-hostname

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

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

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

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

hostnamectl set-hostname whatever

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

hostnamectl             # equivalent to hostnamectl status

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

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

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 для получения уведомлений об изменениях, но немногие это делают.)