Wie benenne ich einen Linux-Host um, ohne dass ein Neustart erforderlich ist, damit die Umbenennung wirksam wird?

26

Ich habe auf serverfault nach einer Antwort auf diese Frage gesucht und konnte sie nicht finden. Ich weiß, dass es möglich ist, aber ich kann mich nicht erinnern, wie es geht. Wie ändere ich den Hostnamen eines Linux-Hosts und lasse diese Änderung ohne Neustart wirksam werden?

Ich benutze Ubuntu 16 und Ubuntu 18.

Ein großes Feature von Ubuntu sind die grafischen Desktop- und grafischen Systemdienstprogramme. Da wir jedoch Ubuntu in unserer Produktionsumgebung ausführen, haben wir uns dafür entschieden, den grafischen Desktop oder die Dienstprogramme nicht zu verwenden, damit diese Funktionen nicht die Ressourcen verbrauchen, die wir in unserer Produktionsumgebung benötigen.

Ich weiß, dass ich die Dateien bearbeite, um den Host umzubenennen:

  • /etc/hostname
  • /etc/hosts

In dem ersetzt /etc/hostnameman einfach den aktuellen Hostnamen (bald der frühere Hostname) durch den neuen Hostnamen.

Ubuntu in der /etc/hostsDatei hat die Zeile:

127.0.1.1 your-hostname your-hostname

Es fungiert als Bootstrapping, während Ihr Host hochfährt und sich in Ihrem Netzwerk etabliert. Vor dem Ändern des Hostnamens your-hostnamewird der aktuelle (bald der frühere) Hostname angezeigt. Wenn Sie den Hostnamen Ihres Hosts ändern, wird dieser Name durch den neuen Namen ersetzt.

Was ich kenne, ist das Ausführen der beiden oben genannten Schritte und das anschließende Neustarten Ihres Hosts. Aber oft möchte man, wie bei einem Produktionsserver, diesen Umbenennungsvorgang ausführen, aber seinen Host nicht neu starten.

Wie kann ich den Hostnamen auf einem Host ändern und diese Änderung in Kraft setzen, ohne den Host neu zu starten?

Peter Jirak Eldritch
quelle
1
"Ubuntu 16" und "Ubuntu 18" gibt es nicht, zwischen 16.04 und 16.10 kann es ebenso große Unterschiede geben wie zwischen 16.10 und 17.04.
Pipe

Antworten:

49

Sie können die Kernelidee des Hostnamens auf einem systemd-basierten System mit dem hostnamectlTool ändern . Beispielsweise:

hostnamectl set-hostname whatever

Sie können die aktuelle Vorstellung des Systems vom Hostnamen anzeigen mit:

hostnamectl             # equivalent to hostnamectl status

Beachten Sie, dass dies die Vorstellung eines laufenden Prozesses vom Hostnamen nicht ändert. Ein solcher Prozess müsste den Hostnamen erneut überprüfen, um aktualisiert zu werden, und fast kein Prozess tut dies. Ein solcher Prozess müsste also neu gestartet werden. Damit jeder Prozess den neuen Hostnamen verwenden kann, müssen sie neu gestartet werden. Im Allgemeinen ist es einfacher, das System neu zu starten, als jeden Dienst einzeln neu zu starten.

Michael Hampton
quelle
1
Muss ich das Netzwerk auf meinem Server neu starten, wenn ich es nach dem Umbenennen nicht neu starten möchte? Ich habe folgendes festgestellt: sudo /etc/init.d/network restart Abgesehen davon ist ein Neustart des Netzwerks auf meinem Server über diesen Befehl erforderlich, um einen laufenden Prozess neu zu starten, bei dem der Servername bekannt sein muss. Einverstanden, dass ein Neustart des Hosts das beheben würde. Das heißt, es gibt Zeiten, in denen ich einen Host wirklich umbenennen, aber nicht neu starten möchte. Gibt es eine Meinung zu sudo /etc/init.d/network restartund wie nützlich ist es, wenn der neue Hostname ohne Neustart wirksam wird?
Peter Jirak Eldritch
3
@ PeterJirak: Völlig nutzlos. Wenn sich die Programme (die den Hostnamen kennen müssen) zuvor nicht darum gekümmert haben, nach Hostnamen-Updates zu suchen, werden sie sich jetzt nicht darum kümmern. Das System zu veranlassen, IP-Adressen auf eth0 neu zu konfigurieren, hat keinen Einfluss darauf.
Grawity
@PeterJirak Was meinst du mit "den neuen Hostnamen in Kraft setzen"? Wie bereits erwähnt, wird es sofort wirksam, und jeder neu gestartete Prozess wird davon Kenntnis erhalten. Ich verstehe auch nicht, warum Sie nach einem Neustart des Netzwerks fragen. Was hat das mit dem Hostnamen zu tun?
Michael Hampton
5
Es ist ein weit verbreitetes Missverständnis, dass die Gesamtheit von "Networking" ein Userspace-Dienst ist, der neu gestartet werden kann, nur weil es ein /etc/init.d-Skript mit diesem Namen gibt.
Grawity
2
@PeterJirak Nebenbei bemerkt, ist das Ausführen von Diensten /etc/init.dauf systemd-Systemen falsch. Es ist nur aus
Gründen der
22

Sie können den Hostnamen im Kernel folgendermaßen ändern:

hostname NEWNAME

Unter Linux entspricht dies praktisch einem der folgenden Punkte:

sysctl kernel.hostname=NEWNAME

echo NEWNAME > /proc/sys/kernel/hostname

Dies hängt nicht von systemd (im Gegensatz zu hostnamectl, für das systemd-hostnamed erforderlich ist) oder anderen nicht standardmäßigen Tools ab, und häufig (insbesondere in Shellscript-Init-Systemen) wurde der anfängliche Hostname an erster Stelle festgelegt.

Die meisten Programme und Dienste verwenden den Hostnamen nicht. Die wenigen, die dies tun (z. B. Postfix oder Dienste, die Kerberos verwenden), können einzeln neu gestartet werden.

(Einige Programme speichern den Hostnamen bis zum Neustart im Cache, andere fragen ihn jedes Mal ab, wenn sie ihn benötigen. Programme können auch (2) / proc / sys / kernel / hostname abfragen, um Änderungsbenachrichtigungen zu erhalten, aber nur wenige.)

Grawity
quelle
2
Beachten Sie, dass diese Methoden nicht dauerhaft sind und einen Neustart nicht überstehen.
Michael Hampton
3
Glücklicherweise hat OP die Persistenz bereits in ihrer Frage selbst behandelt.
Grawity
1
Bei Postfix ist der Hostname möglicherweise an ein oder zwei Stellen in /etc/postfix/main.cfund fest codiert /etc/mailname, sodass auch diese bearbeitet werden müssen.
Mark Plotnick