Come rinominare un host Linux senza dover riavviare per rendere effettiva la ridenominazione?


26

Ho cercato una risposta a questa domanda su serverfault e non sono riuscito a trovarla. So che è possibile, ma non ricordo come farlo. Come faccio a cambiare il nome host di un host Linux e rendere effettive le modifiche senza riavviare?

Sto usando Ubuntu 16 e Ubuntu 18.

Una grande caratteristica di Ubuntu è il desktop grafico e le utilità grafiche del sistema. Tuttavia, stiamo eseguendo Ubuntu nel nostro ambiente di produzione, quindi abbiamo scelto di non utilizzare il desktop grafico o le utility per evitare che quelle funzionalità consumino le risorse di cui abbiamo bisogno nel nostro ambiente di produzione.

So che per rinominare l'host, modifico i file:

  • /etc/hostname
  • /etc/hosts

In /etc/hostnamequello sostituisce solo il nome host corrente (che presto sarà l'ex nome host) con il nuovo nome host.

Ubuntu nel /etc/hostsfile ha la linea:

127.0.1.1 your-hostname your-hostname

Funziona come bootstrap mentre l'host si sta avviando e si sta affermando all'interno della tua rete. Prima di cambiare il nome host, your-hostnameè quello attuale (che presto diventerà l'ex nome host) e come parte della modifica del nome host dell'host, si sostituisce quel nome con il nuovo nome.

Quello che mi è familiare è eseguire i due passaggi precedenti e quindi riavviare l'host. Ma molte volte, come con un server di produzione, si vorrebbe eseguire quella ridenominazione, ma non riavviare l'host.

Come posso cambiare il nome host su un host e rendere effettiva la modifica senza riavviare l'host?


1
"Ubuntu 16" e "Ubuntu 18" non esistono, ci possono essere grandi differenze tra il 16.04 e il 16.10 come ci sono tra il 16.10 e il 17.04.
pipe

Risposte:


49

È possibile cambiare l'idea del kernel del nome host su un sistema basato su systemd usando lo hostnamectlstrumento. Per esempio:

hostnamectl set-hostname whatever

È possibile visualizzare l'idea corrente del nome host del sistema con:

hostnamectl             # equivalent to hostnamectl status

Tieni presente che ciò non modifica l'idea del nome host di un processo in esecuzione. Tale processo dovrebbe controllare nuovamente il nome host per essere aggiornato, e quasi nessun processo lo fa. Pertanto, un tale processo dovrebbe essere riavviato. Affinché ogni processo inizi a utilizzare il nuovo nome host, è necessario riavviarlo. In genere è più semplice riavviare il sistema piuttosto che riavviare ogni servizio singolarmente.


1
Devo riavviare la rete sul mio server se non desidero riavviarlo dopo la ridenominazione? Ho trovato questo: a sudo /etc/init.d/network restart parte questo, riavviare la rete sul mio server tramite quel comando il tuo punto sul riavvio di qualsiasi processo in esecuzione che deve sapere che il nome del server è valido. Concordato che il riavvio dell'host lo avrebbe risolto. Detto questo, ci sono volte in cui voglio davvero rinominare un host, ma in realtà non voglio riavviarlo. Qualche opinione su sudo /etc/init.d/network restarte la sua utilità nel rendere effettivo il nuovo nome host senza riavviare?
Peter Jirak Eldritch il

3
@PeterJirak: completamente inutile. Se quei programmi (che devono conoscere il nome host) non si sono preoccupati di cercare gli aggiornamenti del nome host prima, allora non si preoccuperanno più. Dire al sistema di riconfigurare gli indirizzi IP su eth0 non influirà neanche un po '.
Grawity

@PeterJirak Cosa intendi per "rendere effettivo il nuovo nome host"? Come precedentemente discusso, ha effetto immediato e qualsiasi processo appena avviato ne sarà consapevole. Inoltre non capisco perché stai chiedendo di riavviare la rete? Cosa c'entra questo con il nome host?
Michael Hampton

5
È un'idea sbagliata comune che l'intera "rete" sia un servizio di userspace che può essere riavviato, solo perché esiste uno script /etc/init.d chiamato così.
Grawity il

2
@PeterJirak Come nota a margine, l'esecuzione dei servizi /etc/init.dè sbagliata sui sistemi systemd. È lì solo per la retrocompatibilità con il vecchio System V.
rexkogitans il

22

Puoi cambiare il nome host nel kernel usando:

hostname NEWNAME

Su Linux questo è praticamente uguale a uno dei seguenti:

sysctl kernel.hostname=NEWNAME

echo NEWNAME > /proc/sys/kernel/hostname

Ciò non dipende da systemd (a differenza di hostnamectl che richiede systemd-hostname) o da qualsiasi altro strumento non standard, e spesso (soprattutto nei sistemi shellscript-init) è innanzitutto come è stato impostato il nome host iniziale.

La maggior parte dei programmi e servizi non utilizza effettivamente il nome host; i pochi che lo fanno (ad esempio Postfix o servizi che utilizzano Kerberos) possono essere riavviati uno a uno.

(Alcuni programmi memorizzano nella cache il nome host fino al riavvio, altri lo interrogano ogni volta che ne hanno bisogno. I programmi hanno anche la possibilità di eseguire il polling (2) / proc / sys / kernel / hostname per ricevere le notifiche di modifica, ma pochi lo fanno.)


2
Tieni presente che questi metodi non sono persistenti e non sopravvivranno al riavvio.
Michael Hampton

3
Fortunatamente, l'OP ha già coperto la persistenza nella loro stessa domanda.
Grawity il

1
postfix potrebbe avere il nome host codificato in uno o due punti in /etc/postfix/main.cfe /etc/mailname, quindi anche quelli dovranno essere modificati.
Mark Plotnick,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.