Jak zmienić nazwę hosta Linux bez konieczności ponownego uruchamiania komputera, aby zmiana nazwy zadziałała?

26

Szukałem odpowiedzi na to pytanie przy błędzie serwera i nie mogłem jej znaleźć. Wiem, że to możliwe, ale nie pamiętam, jak to zrobić. Jak zmienić nazwę hosta hosta Linuxa i sprawić, aby ta zmiana zaczęła obowiązywać bez ponownego uruchamiania komputera?

Używam Ubuntu 16 i Ubuntu 18.

Dużą cechą Ubuntu jest graficzny pulpit i graficzne narzędzia systemowe. Jednak Ubuntu działa w naszym środowisku produkcyjnym, dlatego zdecydowaliśmy się nie używać pulpitu graficznego ani narzędzi, aby te funkcje nie zużywały zasobów potrzebnych w naszym środowisku produkcyjnym.

Wiem, że aby zmienić nazwę hosta, edytuję pliki:

  • /etc/hostname
  • /etc/hosts

W tej /etc/hostnamepo prostu zastępuje bieżącą nazwę hosta (wkrótce będzie to poprzednia nazwa hosta) nową nazwą hosta.

Ubuntu w /etc/hostspliku ma wiersz:

127.0.1.1 your-hostname your-hostname

Działa jako ładowanie początkowe, gdy host uruchamia się i ustanawia w sieci. Przed zmianą nazwy hosta your-hostnamejest ona obecna (wkrótce będzie to poprzednia nazwa hosta), a w ramach zmiany nazwy hosta hosta jedna z nich zastępuje tę nową nazwą.

Znam się na wykonaniu powyższych dwóch kroków, a następnie ponownym uruchomieniu komputera. Ale wiele razy, tak jak w przypadku serwera produkcyjnego, chciałoby się zmienić tę nazwę, ale nie restartować hosta.

Jak mogę zmienić nazwę hosta na hoście i sprawić, aby ta zmiana zaczęła obowiązywać bez ponownego uruchamiania hosta?

Peter Jirak Eldritch
źródło
1
Nie ma czegoś takiego jak „Ubuntu 16” i „Ubuntu 18”, mogą występować tak duże różnice między 16.04 a 16.10, jak między 16.10 a 17.04.
rura

Odpowiedzi:

49

Za pomocą tego hostnamectlnarzędzia możesz zmienić pomysł jądra na nazwę hosta w systemie opartym na systemie . Na przykład:

hostnamectl set-hostname whatever

Możesz zobaczyć obecny pomysł systemu na nazwę hosta za pomocą:

hostnamectl             # equivalent to hostnamectl status

Należy pamiętać, że nie zmienia to koncepcji uruchomionego procesu na nazwę hosta. Taki proces musiałby ponownie sprawdzić nazwę hosta w celu aktualizacji i prawie żaden proces tego nie robi. Dlatego taki proces musiałby zostać zrestartowany. Aby każdy proces zaczął używać nowej nazwy hosta, należy go zrestartować. Generalnie łatwiej jest po prostu zrestartować system niż zrestartować każdą usługę osobno.

Michael Hampton
źródło
1
Czy muszę ponownie uruchamiać sieć na moim serwerze, jeśli nie chcę go ponownie uruchamiać po zmianie nazwy? Znalazłem to: sudo /etc/init.d/network restart Poza tym, restartowanie sieci na moim serwerze za pomocą tego polecenia oznacza, że ​​chcesz zrestartować każdy uruchomiony proces, który musi wiedzieć, że nazwa serwera jest poprawna. Zgodził się, że ponowne uruchomienie hosta to naprawi. To powiedziawszy, są chwile, kiedy naprawdę chcę zmienić nazwę hosta, ale tak naprawdę nie chcę go ponownie uruchamiać. Wszelkie opinie na temat sudo /etc/init.d/network restartnowej nazwy hosta i jej przydatności w ponownym uruchomieniu?
Peter Jirak Eldritch
3
@PeterJirak: Całkowicie bezużyteczne. Jeśli te programy (które muszą znać nazwę hosta) nie zadały sobie trudu, aby wcześniej szukać aktualizacji nazwy hosta, to nie będą się teraz przejmować. Powiedzenie systemowi o ponownej konfiguracji adresów IP w eth0 nie wpłynie na to ani trochę.
grawity
@PeterJirak Co masz na myśli przez „wprowadzenie nowej nazwy hosta w życie”? Jak wspomniano wcześniej, zaczyna obowiązywać natychmiast i każdy nowo rozpoczęty proces będzie o tym wiedział. Nie rozumiem również, dlaczego pytasz o ponowne uruchomienie sieci? Co to ma wspólnego z nazwą hosta?
Michael Hampton
5
Jest powszechnym błędnym przekonaniem, że całość „sieci” jest usługą przestrzeni użytkownika, którą można zrestartować tylko dlatego, że istnieje taki skrypt /etc/init.d.
grawity
2
@PeterJirak Na marginesie: uruchamianie usług w /etc/init.dsystemach systemowych jest nieprawidłowe. Ma tylko kompatybilność wsteczną ze starym Systemem V.
rexkogitans
22

Możesz zmienić nazwę hosta w jądrze, używając:

hostname NEWNAME

W systemie Linux jest to praktycznie równe jednemu z poniższych:

sysctl kernel.hostname=NEWNAME

echo NEWNAME > /proc/sys/kernel/hostname

Nie zależy to od systemd (w przeciwieństwie do hostnamectl, który wymaga systemd-hostnamed) lub innych niestandardowych narzędzi, a często (szczególnie w systemach shellscript-init) to w jaki sposób początkowa nazwa hosta została ustawiona.

Większość programów i usług nie używa nazwy hosta; kilka, które to robią (np. Postfix lub usługi korzystające z Kerberos) mogą być restartowane jeden po drugim.

(Niektóre programy buforują nazwę hosta do ponownego uruchomienia, inne sprawdzają ją za każdym razem, gdy jej potrzebują. Programy mają także możliwość odpytywania (2) / proc / sys / kernel / hostname, aby otrzymywać powiadomienia o zmianach, ale niewiele z nich.)

grawitacja
źródło
2
Pamiętaj, że te metody nie są trwałe i nie przetrwają ponownego uruchomienia.
Michael Hampton
3
Na szczęście OP już w swoim pytaniu opisywał upór.
grawitacja
1
Postfix może mieć nazwę hosta zakodowaną na stałe w jednym lub dwóch miejscach w, /etc/postfix/main.cfa /etc/mailnamewięc te również będą musiały być edytowane.
Mark Plotnick