Я искал ответ на этот вопрос на 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
является текущим (вскоре станет прежним именем хоста), и в рамках изменения имени хоста вашего хоста его заменяют новым именем.
Что я знаком с выполнением двух вышеуказанных шагов, а затем перезагрузкой вашего хоста. Но много раз, как в случае с производственным сервером, кто-то хотел бы выполнить это переименование, но не перезагружать хост.
Как я могу изменить имя хоста на хосте и заставить это изменение вступить в силу без перезагрузки хоста?
Вы можете изменить представление ядра об имени хоста в 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 для получения уведомлений об изменениях, но немногие из них.)