¿Cómo cambio el nombre de un host de Linux sin necesidad de reiniciar para que el cambio de nombre surta efecto?

26

Busqué una respuesta a esta pregunta en serverfault y no pude encontrarla. Sé que es posible, pero no recuerdo cómo hacerlo. ¿Cómo cambio el nombre de host de un host Linux y hago que ese cambio surta efecto sin reiniciar?

Estoy usando Ubuntu 16 y Ubuntu 18.

Una gran característica de Ubuntu es el escritorio gráfico y las utilidades del sistema gráfico. Sin embargo, estamos ejecutando Ubuntu en nuestro entorno de producción, por lo que elegimos no utilizar el escritorio gráfico o las utilidades para que esas características no consuman los recursos que necesitamos en nuestro entorno de producción.

Sé que para cambiar el nombre del host, edito los archivos:

  • /etc/hostname
  • /etc/hosts

En el /etc/hostnameuno solo reemplaza el nombre de host actual (que pronto será el antiguo nombre de host) con el nuevo nombre de host.

Ubuntu en el /etc/hostsarchivo tiene la línea:

127.0.1.1 your-hostname your-hostname

Actúa como arranque mientras su host se inicia y se establece dentro de su red. Antes de cambiar el nombre de host, your-hostnamees el actual (que pronto será el antiguo nombre de host) y, como parte del cambio del nombre de host de su host, uno reemplaza ese nombre con el nuevo nombre.

Con lo que estoy familiarizado es ejecutar los dos pasos anteriores y luego reiniciar su host. Pero muchas veces, como con un servidor de producción, a uno le gustaría ejecutar ese cambio de nombre, pero no reiniciar el host.

¿Cómo puedo cambiar el nombre de host en un host y hacer que ese cambio surta efecto sin reiniciar el host?

Peter Jirak Eldritch
fuente
1
No hay tal cosa como "Ubuntu 16" y "Ubuntu 18", puede haber diferencias tan grandes entre 16.04 y 16.10 como entre 16.10 y 17.04.
tubería

Respuestas:

49

Puede cambiar la idea del núcleo del nombre de host en un sistema basado en systemd utilizando la hostnamectlherramienta. Por ejemplo:

hostnamectl set-hostname whatever

Puede ver la idea actual del sistema del nombre de host con:

hostnamectl             # equivalent to hostnamectl status

Tenga en cuenta que esto no cambia la idea de un proceso en ejecución del nombre de host. Tal proceso tendría que verificar el nombre de host nuevamente para poder actualizarse, y casi ningún proceso lo hace. Por lo tanto, dicho proceso debería reiniciarse. Para que cada proceso comience a usar el nuevo nombre de host, deben reiniciarse. En general, es más fácil reiniciar el sistema que reiniciar cada servicio individualmente.

Michael Hampton
fuente
1
¿Debo reiniciar la red en mi servidor si no deseo reiniciarla después del cambio de nombre? Encontré esto: sudo /etc/init.d/network restart aparte de eso, reiniciar las redes en mi servidor a través de ese comando, tu punto sobre reiniciar cualquier proceso en ejecución que necesite saber que el nombre del servidor es válido. Acordó que reiniciar el host solucionaría eso. Dicho esto, hay veces que realmente quiero cambiar el nombre de un host, pero realmente no quiero reiniciarlo. ¿Alguna opinión acerca de sudo /etc/init.d/network restartsu nuevo nombre de host y su utilidad para que surta efecto sin reiniciar?
Peter Jirak Eldritch
3
@PeterJirak: completamente inútil. Si esos programas (que necesitan conocer el nombre de host) no se molestaron en buscar actualizaciones de nombres de host antes, entonces no se molestarán ahora. Decirle al sistema que reconfigure las direcciones IP en eth0 no afectará eso ni un poco.
Grawity
@PeterJirak ¿Qué quieres decir con "conseguir que el nuevo nombre de host tenga efecto"? Como se discutió anteriormente, surte efecto de inmediato y cualquier proceso recién iniciado lo sabrá. Tampoco entiendo por qué preguntas sobre reiniciar la red. ¿Qué tiene que ver eso con el nombre de host?
Michael Hampton
55
Es un error común pensar que la totalidad de las "redes" es un servicio de espacio de usuario que se puede reiniciar, solo porque hay un script /etc/init.d llamado así.
Grawity
2
@ PeterJirak Como nota al margen, la ejecución de servicios /etc/init.des incorrecta en los sistemas systemd. Está justo allí para la compatibilidad con versiones anteriores del antiguo Sistema V.
rexkogitans
22

Puede cambiar el nombre de host en el núcleo usando:

hostname NEWNAME

En Linux, esto es prácticamente igual a cualquiera de los siguientes:

sysctl kernel.hostname=NEWNAME

echo NEWNAME > /proc/sys/kernel/hostname

Esto no depende de systemd (a diferencia de hostnamectl que requiere systemd-hostnamed) o cualquier otra herramienta no estándar, y a menudo (especialmente en sistemas shellscript-init) es cómo se configuró el nombre de host inicial en primer lugar.

La mayoría de los programas y servicios en realidad no usan el nombre de host; los pocos que lo hacen (por ejemplo, Postfix o servicios que usan Kerberos) pueden reiniciarse uno por uno.

(Algunos programas almacenan en caché el nombre de host hasta que se reinicia, otros lo consultan cada vez que lo necesitan. Los programas también tienen la capacidad de sondear (2) / proc / sys / kernel / hostname para recibir notificaciones de cambio, pero pocos lo hacen).

Gravedad
fuente
2
Tenga en cuenta que estos métodos no son persistentes y no sobrevivirán al reinicio.
Michael Hampton
3
Afortunadamente, OP ya ha cubierto la persistencia en su propia pregunta.
Grawity
1
Postfix puede tener el nombre de host codificado en uno o dos lugares en /etc/postfix/main.cfy /etc/mailname, por lo que los tendrá que ser editado, también.
Mark Plotnick