Bagaimana cara saya mengubah nama host Linux tanpa perlu reboot agar nama tersebut berlaku?

26

Saya mencari jawaban untuk pertanyaan ini pada serverfault dan tidak dapat menemukannya. Saya tahu itu mungkin, tetapi saya tidak ingat bagaimana melakukannya. Bagaimana cara mengubah nama host host Linux dan membuat perubahan itu berlaku tanpa reboot?

Saya menggunakan Ubuntu 16 dan Ubuntu 18.

Fitur besar Ubuntu adalah desktop grafis dan utilitas sistem grafis. Namun, kami menjalankan Ubuntu di lingkungan produksi kami sehingga kami memilih untuk tidak menggunakan desktop grafis atau utilitas agar tidak memiliki fitur-fitur tersebut mengkonsumsi sumber daya yang kami butuhkan di lingkungan produksi kami.

Saya tahu bahwa untuk mengganti nama host, saya mengedit file:

  • /etc/hostname
  • /etc/hosts

Dalam /etc/hostnamesatu hanya mengganti nama host saat ini (segera menjadi nama host sebelumnya) dengan nama host baru.

Ubuntu dalam /etc/hostsfile memiliki baris:

127.0.1.1 your-hostname your-hostname

Ini bertindak sebagai bootstrap saat host Anda boot dan memantapkan dirinya dalam jaringan Anda. Sebelum mengubah nama host, your-hostnameadalah yang sekarang (segera menjadi nama host yang lama) dan sebagai bagian dari mengubah nama host Anda, seseorang mengganti nama itu dengan nama baru.

Yang saya kenal adalah mengeksekusi dua langkah di atas dan kemudian me-reboot host Anda. Tetapi banyak kali, seperti dengan server produksi, seseorang ingin menjalankan penggantian nama itu, tetapi tidak me-reboot host seseorang.

Bagaimana saya bisa mengubah nama host pada host dan membuat perubahan itu berlaku tanpa me-reboot host?

Peter Jirak Eldritch
sumber
1
Tidak ada yang namanya "Ubuntu 16" dan "Ubuntu 18", bisa ada perbedaan besar antara 16,04 dan 16,10 karena ada antara 16,10 dan 17,04.
pipa

Jawaban:

49

Anda dapat mengubah ide kernel tentang nama host pada sistem berbasis systemd menggunakan hostnamectlalat ini. Sebagai contoh:

hostnamectl set-hostname whatever

Anda dapat melihat ide sistem saat ini dari nama host dengan:

hostnamectl             # equivalent to hostnamectl status

Perlu diingat bahwa ini tidak mengubah ide proses yang berjalan dari nama host. Proses semacam itu harus memeriksa lagi nama host agar dapat diperbarui, dan hampir tidak ada proses yang melakukannya. Jadi proses seperti itu perlu dimulai kembali. Agar setiap proses untuk mulai menggunakan nama host baru, mereka harus direstart. Secara umum lebih mudah untuk hanya me-reboot sistem daripada me-restart setiap layanan secara individual.

Michael Hampton
sumber
1
Apakah saya perlu me-restart jaringan di server saya jika saya tidak ingin me-reboot setelah mengganti nama? Saya menemukan ini: sudo /etc/init.d/network restart Selain itu, memulai kembali jaringan di server saya melalui perintah itu maksud Anda tentang memulai kembali setiap proses yang berjalan yang perlu tahu nama server valid. Setuju bahwa memulai ulang host akan memperbaikinya. Yang mengatakan, ada saatnya saya benar-benar ingin mengganti nama host, tetapi benar-benar tidak ingin me-reboot itu. Adakah pendapat tentang sudo /etc/init.d/network restartdan kegunaannya dalam mendapatkan nama host baru untuk mulai berlaku saat reboot?
Peter Jirak Eldritch
3
@PeterJirak: Sama sekali tidak berguna. Jika program-program itu (yang perlu mengetahui nama host) tidak repot-repot mengawasi pembaruan nama host sebelumnya, maka mereka tidak akan repot sekarang. Memberitahu sistem untuk mengkonfigurasi ulang alamat IP pada eth0 tidak akan memengaruhi bahkan sedikit pun.
grawity
@PeterJirak Apa yang Anda maksud dengan "membuat nama host baru mulai berlaku"? Seperti dibahas sebelumnya, ini berlaku segera, dan setiap proses yang baru dimulai akan menyadarinya. Saya juga tidak mengerti mengapa Anda bertanya tentang me-restart jaringan? Apa hubungannya dengan nama host?
Michael Hampton
5
Ini adalah kesalahpahaman umum bahwa keseluruhan "jaringan" adalah layanan userspace yang dapat dimulai kembali, hanya karena ada skrip /etc/init.d bernama seperti itu.
grawity
2
@PeterJirak Sebagai catatan, menjalankan layanan di /etc/init.dadalah cara yang salah pada sistem systemd. Itu hanya ada untuk kompatibilitas ke belakang ke System V. lama
rexkogitans
22

Anda dapat mengubah nama host in-kernel menggunakan:

hostname NEWNAME

Di Linux ini praktis sama dengan salah satu dari yang berikut:

sysctl kernel.hostname=NEWNAME

echo NEWNAME > /proc/sys/kernel/hostname

Ini tidak tergantung pada systemd (tidak seperti hostnamectl yang membutuhkan systemd-hostnamed) atau alat non-standar lainnya, dan sering (terutama dalam sistem shellscript-init) adalah bagaimana nama host awal ditetapkan di tempat pertama.

Sebagian besar program dan layanan tidak benar-benar menggunakan nama host; beberapa yang melakukannya (mis. Postfix atau layanan menggunakan Kerberos) dapat dimulai kembali satu-per-satu.

(Beberapa program men-cache nama host sampai restart, yang lain menanyakannya setiap kali mereka membutuhkannya. Program juga memiliki kemampuan untuk polling (2) / proc / sys / kernel / hostname untuk menerima pemberitahuan perubahan, tetapi hanya sedikit yang melakukannya.)

grawity
sumber
2
Perlu diingat bahwa metode ini tidak gigih dan tidak akan selamat dari reboot.
Michael Hampton
3
Untungnya, OP telah membahas kegigihan dalam pertanyaan mereka sendiri.
grawity
1
postfix mungkin memiliki nama host yang dikodekan secara keras di satu atau dua tempat di /etc/postfix/main.cfdan /etc/mailname, jadi mereka perlu diedit juga.
Mark Plotnick