Comment renommer un hôte Linux sans avoir besoin de redémarrer pour que le renommage prenne effet?

26

J'ai cherché une réponse à cette question sur serverfault et je n'ai pas pu la trouver. Je sais que c'est possible, mais je ne me souviens pas comment le faire. Comment changer le nom d'hôte d'un hôte Linux et faire en sorte que cette modification prenne effet sans redémarrage?

J'utilise Ubuntu 16 et Ubuntu 18.

Une grande fonctionnalité d'Ubuntu est le bureau graphique et les utilitaires du système graphique. Cependant, nous exécutons Ubuntu dans notre environnement de production, nous avons donc choisi de ne pas utiliser le bureau graphique ou les utilitaires afin que ces fonctionnalités ne consomment pas les ressources dont nous avons besoin dans notre environnement de production.

Je sais que pour renommer l'hôte, je modifie les fichiers:

  • /etc/hostname
  • /etc/hosts

Dans celui- /etc/hostnameci, il suffit de remplacer le nom d'hôte actuel (qui sera bientôt l'ancien nom d'hôte) par le nouveau nom d'hôte.

Ubuntu dans le /etc/hostsfichier a la ligne:

127.0.1.1 your-hostname your-hostname

Il agit comme un amorçage pendant que votre hôte démarre et s'établit au sein de votre réseau. Avant de changer le nom d'hôte, your-hostnameest le nom actuel (qui sera bientôt l'ancien nom d'hôte) et dans le cadre du changement du nom d'hôte de votre hôte, on remplace ce nom par le nouveau nom.

Ce que je connais, c'est d'exécuter les deux étapes ci-dessus, puis de redémarrer votre hôte. Mais beaucoup de fois, comme avec un serveur de production, on voudrait exécuter ce changement de nom, mais pas redémarrer son hôte.

Comment puis-je changer le nom d'hôte sur un hôte et obtenir cette modification pour prendre effet sans redémarrer l'hôte?

Peter Jirak Eldritch
la source
1
Il n'y a rien de tel que "Ubuntu 16" et "Ubuntu 18", il peut y avoir autant de différences entre 16.04 et 16.10 qu'il y en a entre 16.10 et 17.04.
pipe

Réponses:

49

Vous pouvez changer l'idée du noyau du nom d'hôte sur un système basé sur systemd en utilisant l' hostnamectloutil. Par exemple:

hostnamectl set-hostname whatever

Vous pouvez voir l'idée actuelle du système du nom d'hôte avec:

hostnamectl             # equivalent to hostnamectl status

Gardez à l'esprit que cela ne change pas l'idée du nom d'hôte d'un processus en cours d'exécution. Un tel processus devrait vérifier à nouveau le nom d'hôte afin d'être mis à jour, et presque aucun processus ne le fait. Un tel processus devrait donc être redémarré. Pour que chaque processus commence à utiliser le nouveau nom d'hôte, ils doivent être redémarrés. Il est généralement plus facile de simplement redémarrer le système que de redémarrer chaque service individuellement.

Michael Hampton
la source
1
Dois-je redémarrer la mise en réseau sur mon serveur si je ne souhaite pas le redémarrer après le changement de nom? J'ai trouvé ceci: sudo /etc/init.d/network restart Mis à part cela, redémarrer la mise en réseau sur mon serveur via cette commande votre point sur le redémarrage de tout processus en cours d'exécution qui a besoin de connaître le nom du serveur est valide. A convenu que le redémarrage de l'hôte résoudrait ce problème. Cela dit, il y a des moments où je veux vraiment renommer un hôte, mais je ne veux vraiment pas le redémarrer. Avez-vous une opinion sudo /etc/init.d/network restartet son utilité pour que le nouveau nom d'hôte prenne effet sans redémarrage?
Peter Jirak Eldritch
3
@PeterJirak: Complètement inutile. Si ces programmes (qui ont besoin de connaître le nom d'hôte) n'ont pas pris la peine de surveiller les mises à jour du nom d'hôte auparavant, ils ne le feront pas maintenant. Dire au système de reconfigurer les adresses IP sur eth0 n'affectera pas cela même un peu.
grawity
@PeterJirak Qu'entendez-vous par "faire en sorte que le nouveau nom d'hôte prenne effet"? Comme indiqué précédemment, il prend effet immédiatement et tout nouveau processus démarré en sera informé. Je ne comprends pas non plus pourquoi vous demandez le redémarrage du réseau? Qu'est-ce que cela a à voir avec le nom d'hôte?
Michael Hampton
5
C'est une idée fausse commune que l'intégralité de la «mise en réseau» est un service d'espace utilisateur qui peut être redémarré, simplement parce qu'il y a un script /etc/init.d nommé comme ça.
grawity
2
@PeterJirak En guise de remarque, exécuter des services dans /etc/init.dle mauvais sens sur les systèmes systemd. Il est juste là pour la compatibilité descendante avec l'ancien système V.
rexkogitans
22

Vous pouvez modifier le nom d'hôte du noyau en utilisant:

hostname NEWNAME

Sous Linux, cela est pratiquement égal à l'un des éléments suivants:

sysctl kernel.hostname=NEWNAME

echo NEWNAME > /proc/sys/kernel/hostname

Cela ne dépend pas de systemd (contrairement à hostnamectl qui nécessite systemd-hostnamed) ou de tout autre outil non standard, et souvent (en particulier dans les systèmes shellscript-init), c'est la façon dont le nom d'hôte initial a été défini en premier lieu.

La plupart des programmes et services ne sont pas réellement utiliser le nom d' hôte; ceux qui le font (par exemple Postfix ou les services utilisant Kerberos) peuvent être redémarrés un par un.

(Certains programmes mettent en cache le nom d'hôte jusqu'au redémarrage, d'autres l'interrogent chaque fois qu'ils en ont besoin. Les programmes ont également la possibilité d'interroger (2) / proc / sys / kernel / hostname pour recevoir des notifications de changement, mais peu le font.)

grawity
la source
2
Gardez à l'esprit que ces méthodes ne sont pas persistantes et ne survivront pas à un redémarrage.
Michael Hampton
3
Heureusement, OP a déjà couvert la persistance dans leur question elle-même.
grawity
1
postfix peut avoir le nom d'hôte codé en dur à un ou deux endroits /etc/postfix/main.cfet /etc/mailname, par conséquent, ceux-ci devront également être modifiés.
Mark Plotnick