web-dev-qa-db-ja.com

名前変更を有効にするためにリブートする必要なしにLinuxホストの名前を変更するにはどうすればよいですか?

Serverfaultでこの質問に対する回答を検索しましたが、見つかりませんでした。可能なことは知っていますが、どうすればいいのか思い出せません。 Linuxホストのホスト名を変更し、再起動せずにその変更を有効にするにはどうすればよいですか?

Ubuntu 16とUbuntu 18を使用しています。

Ubuntuの大きな機能は、グラフィカルデスクトップとグラフィカルシステムユーティリティです。ただし、私たちは本番環境でUbuntuを実行しているため、これらの機能が本番環境で必要なリソースを消費しないように、グラフィカルデスクトップやユーティリティを使用しないことを選択しました。

ホストの名前を変更するには、ファイルを編集します。

  • /etc/hostname
  • /etc/hosts

の中に /etc/hostname oneは、現在のホスト名(まもなく元のホスト名になる)を新しいホスト名に置き換えるだけです。

Ubuntuの/etc/hostsファイルには次の行があります:

127.0.1.1 your-hostname your-hostname

これは、ホストが起動してネットワーク内で自身を確立している間、ブートストラップとして機能します。ホスト名を変更する前に、your-hostnameは現在のものであり(間もなく以前のホスト名になる)、ホストのホスト名を変更する一環として、その名前を新しい名前に置き換えます。

私がよく知っているのは、上記の2つのステップを実行してからホストを再起動することです。しかし、多くの場合、本番サーバーのように、その名前変更を実行したいが、ホストを再起動したくない場合があります。

ホストのホスト名を変更し、ホストを再起動せずにその変更を有効にするにはどうすればよいですか?

26

hostnamectlツールを使用して、systemdベースのシステムでのカーネルのホスト名の考え方を変更できます。例えば:

hostnamectl set-hostname whatever

ホスト名に関するシステムの現在の考えを表示するには、次のようにします。

hostnamectl             # equivalent to hostnamectl status

これは、実行中のプロセスのホスト名の概念を変更しないことに注意してください。このようなプロセスは、更新するためにホスト名を再度確認する必要があり、ほとんどのプロセスは行いません。したがって、このようなプロセスを再起動する必要があります。 everyプロセスで新しいホスト名の使用を開始するには、プロセスを再起動する必要があります。一般に、すべてのサービスを個別に再起動するよりも、システムを再起動する方が簡単です。

49
Michael Hampton

カーネル内のホスト名は次の方法で変更できます。

hostname NEWNAME

Linuxでは、これは実質的に次のいずれかと同じです。

sysctl kernel.hostname=NEWNAME

echo NEWNAME > /proc/sys/kernel/hostname

これはsystemd(systemd-hostnamedを必要とするhostnamectlとは異なり)やその他の非標準ツールに依存せず、多くの場合(特にshellscript-initシステムでは)最初のホスト名が最初に設定された方法です場所。

ほとんどのプログラムとサービスは実際にはseホスト名ではありません。実行するもの(PostfixやKerberosを使用するサービスなど)は1つずつ再起動できます。

(再起動するまでホスト名をキャッシュするプログラムもあれば、必要になるたびにホスト名をクエリするプログラムもあります。プログラムには、変更通知を受信するためにpoll(2)/ proc/sys/kernel/hostnameをポーリングする機能もありますが、一部のプログラムでは実行しません)。

22
user1686