Як перейменувати хост Linux, не потребуючи перезавантаження, щоб перейменування набуло чинності?


26

Я шукав відповідь на це питання на сервері за замовчуванням, і не зміг його знайти. Я знаю, що це можливо, але я не можу пригадати, як це зробити. Як я можу змінити ім'я хоста Linux і отримати, щоб ці зміни набули чинності без перезавантаження?

Я використовую Ubuntu 16 і Ubuntu 18.

Великою особливістю Ubuntu є графічні утиліти настільних та графічних систем. Однак ми запускаємо Ubuntu у виробничому середовищі, тому ми вирішили не використовувати графічний робочий стіл або утиліти, щоб ці функції не споживали потрібні нам ресурси у виробничому середовищі.

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

  • /etc/hostname
  • /etc/hosts

В /etc/hostnameодному просто заміняється поточне ім'я хоста (скоро буде колишнє ім'я хоста) на нове ім'я хоста.

У /etc/hostsфайлу Ubuntu є рядок:

127.0.1.1 your-hostname your-hostname

Він діє як завантажувальний механізм, поки ваш хост завантажується та встановлюється у вашій мережі. Перед тим, як змінити ім'я хоста, your-hostnameє поточним (незабаром буде колишнім іменем хоста), і як частина зміни імені хоста, він замінює це ім'я на нове ім'я.

Мені знайоме виконання вищевказаних кроків та перезавантаження вашого хоста. Але багато разів, як і на виробничому сервері, хотілося б виконати це перейменування, але не перезавантажувати хоста.

Як я можу змінити ім'я хоста на хості та отримати ці зміни набути чинності без перезавантаження хоста?


1
Немає таких понять, як "Ubuntu 16" та "Ubuntu 18", між 16.04 та 16.10 можуть бути такі ж великі відмінності, як і між 16.10 та 17.04.
труба

Відповіді:


49

Ви можете змінити уявлення ядра щодо імені хоста в системі, що базується на системі, використовуючи hostnamectlінструмент. Наприклад:

hostnamectl set-hostname whatever

Ви можете переглянути поточну ідею системи для імені хоста за допомогою:

hostnamectl             # equivalent to hostnamectl status

Майте на увазі, що це не змінює уявлення запущеного процесу щодо імені хоста. Такий процес повинен був би перевірити ім'я хоста ще раз, щоб оновитись, і майже жоден процес цього не робить. Таким чином, такий процес потрібно було б відновити. Для того, щоб кожен процес почав використовувати нове ім'я хоста, їх потрібно перезапустити. Зазвичай простіше просто перезавантажити систему, ніж перезавантажувати кожен сервіс окремо.


1
Чи потрібно перезапускати мережу на своєму сервері, якщо я не хочу перезавантажувати її після перейменування? Я виявив це: окрім sudo /etc/init.d/network restart цього, перезапуск мережі на моєму сервері через цю команду. Ваша думка про перезапуск будь-якого запущеного процесу, для якого потрібно знати ім’я сервера, є дійсним. Домовились, що перезапуск хоста це виправить. Однак, є випадки, коли я дуже хочу перейменувати хост, але насправді не хочу його перезавантажувати. Будь-яка думка про sudo /etc/init.d/network restartїї корисність для отримання нового імені хоста, яке набуває чинності без перезавантаження?
Пітер Джирак Елдріч

3
@PeterJirak: Цілком марно. Якщо ті програми (яким потрібно знати ім'я хоста) раніше не намагалися стежити за оновленнями імен хостів, вони зараз не будуть турбувати. Повідомлення системи про перенастроювання IP-адрес на eth0 не вплине на це навіть небагато.
grawity

@PeterJirak Що ви маєте на увазі під «отримання нового імені хоста, яке набирає чинності»? Як уже обговорювалося раніше, воно набирає чинності негайно, і будь-який розпочатий процес буде про це усвідомлений. Я також не розумію, чому ви питаєте про перезапуск мережі? Що це стосується імені хоста?
Майкл Хемптон

5
Поширена помилкова думка, що вся "мережа" - це послуга простору користувачів, яку можна перезапустити, лише тому, що існує такий сценарій /etc/init.d.
grawity

2
@PeterJirak Як зауваження, запуск служб у /etc/init.dнеправильних системах для системних систем.
Якраз

22

Ви можете змінити ім'я хоста в ядрі, використовуючи:

hostname NEWNAME

У Linux це практично дорівнює одному з наступних:

sysctl kernel.hostname=NEWNAME

echo NEWNAME > /proc/sys/kernel/hostname

Це не залежить від systemd (на відміну від hostnamectl, для якого потрібен systemd-hostnamed), або будь-яких інших нестандартних інструментів, і часто (особливо в системах shellscript-init), як початкове ім'я хоста було встановлено в першу чергу.

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

(Деякі програми кешують ім'я хоста до перезавантаження, інші запитують його кожного разу, коли їм це потрібно. Програми також мають можливість опитування (2) / proc / sys / kernel / ім'я хоста, щоб отримувати сповіщення про зміни, але мало хто робить.)


2
Майте на увазі, що ці методи не є стійкими і не переживуть перезавантаження.
Майкл Хемптон

3
На щастя, ОП вже висвітлювала наполегливість у своєму питанні.
grawity

1
Postfix може мати жорстке кодування в одному або двох місцях у, /etc/postfix/main.cfі /etc/mailnameтому їх також потрібно буде редагувати.
Марк Плотнік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.