ฉันจะเปลี่ยนชื่อโฮสต์ Linux โดยไม่ต้องรีบูตเพื่อให้การเปลี่ยนชื่อมีผลอย่างไร


26

ฉันค้นหาคำตอบสำหรับคำถามนี้ในข้อผิดพลาดของเซิร์ฟเวอร์และไม่พบ ฉันรู้ว่ามันเป็นไปได้ แต่ฉันจำไม่ได้ว่าจะทำอย่างไร ฉันจะเปลี่ยนชื่อโฮสต์ของ Linux และรับการเปลี่ยนแปลงที่จะมีผลโดยไม่ต้องรีบูตได้อย่างไร

ฉันใช้ Ubuntu 16 และ Ubuntu 18

คุณสมบัติที่สำคัญของ Ubuntu คือเดสก์ทอปแบบกราฟิกและระบบสาธารณูปโภคแบบกราฟิก อย่างไรก็ตามเราใช้งาน Ubuntu ในสภาพแวดล้อมการผลิตของเราดังนั้นเราเลือกที่จะไม่ใช้กราฟิกเดสก์ท็อปหรือยูทิลิตี้เพื่อไม่ให้ฟีเจอร์เหล่านั้นสิ้นเปลืองทรัพยากรที่เราต้องการในสภาพแวดล้อมการผลิตของเรา

ฉันรู้ว่าการเปลี่ยนชื่อโฮสต์ฉันแก้ไขไฟล์:

  • /etc/hostname
  • /etc/hosts

ในอันที่/etc/hostnameหนึ่งจะแทนที่ชื่อโฮสต์ปัจจุบัน (เร็ว ๆ นี้จะเป็นชื่อโฮสต์เดิม) ด้วยชื่อโฮสต์ใหม่

Ubuntu ใน/etc/hostsไฟล์มีบรรทัด:

127.0.1.1 your-hostname your-hostname

มันทำหน้าที่เป็น bootstrapping ขณะที่โฮสต์ของคุณกำลังบูทและสร้างตัวมันเองภายในเครือข่ายของคุณ ก่อนที่จะเปลี่ยนชื่อโฮสต์your-hostnameเป็นปัจจุบัน (เร็ว ๆ นี้จะเป็นชื่อโฮสต์เดิม) และเป็นส่วนหนึ่งของการเปลี่ยนชื่อโฮสต์ของโฮสต์ของคุณหนึ่งแทนที่ชื่อนั้นด้วยชื่อใหม่

สิ่งที่ฉันคุ้นเคยคือการดำเนินการสองขั้นตอนข้างต้นแล้วรีบูตโฮสต์ของคุณ แต่มีเวลามากมายเช่นเดียวกับเซิร์ฟเวอร์ที่ใช้งานจริงเราต้องการดำเนินการเปลี่ยนชื่อนั้น แต่ไม่รีบูตโฮสต์

ฉันจะเปลี่ยนชื่อโฮสต์ในโฮสต์และรับการเปลี่ยนแปลงที่จะมีผลโดยไม่ต้องรีบูตโฮสต์อย่างไร


1
ไม่มีสิ่งเช่น "Ubuntu 16" และ "Ubuntu 18" อาจมีความแตกต่างใหญ่ระหว่าง 16.04 และ 16.10 เนื่องจากมีระหว่าง 16.10 และ 17.04
ท่อ

คำตอบ:


49

คุณสามารถเปลี่ยนแนวคิดของเคอร์เนลของชื่อโฮสต์บนระบบที่ใช้ systemd โดยใช้hostnamectlเครื่องมือ ตัวอย่างเช่น:

hostnamectl set-hostname whatever

คุณสามารถดูแนวคิดปัจจุบันของชื่อโฮสต์ด้วย:

hostnamectl             # equivalent to hostnamectl status

โปรดทราบว่าสิ่งนี้จะไม่เปลี่ยนความคิดของชื่อโฮสต์ของกระบวนการที่กำลังทำงานอยู่ กระบวนการดังกล่าวจะต้องตรวจสอบชื่อโฮสต์อีกครั้งเพื่ออัปเดตและเกือบจะไม่มีกระบวนการใด ๆ ดังนั้นกระบวนการดังกล่าวจะต้องเริ่มต้นใหม่ เพื่อให้ทุกกระบวนการเริ่มต้นใช้ชื่อโฮสต์ใหม่พวกเขาจะต้องเริ่มต้นใหม่ โดยทั่วไปแล้วการรีบูทระบบง่ายกว่าการรีสตาร์ททุกบริการ


1
ฉันต้องรีสตาร์ทระบบเครือข่ายบนเซิร์ฟเวอร์ของฉันหรือไม่หากฉันไม่ต้องการรีบูตเครื่องหลังจากเปลี่ยนชื่อใหม่ ฉันพบสิ่งนี้: sudo /etc/init.d/network restart นอกเหนือจากนั้นการรีสตาร์ทเครือข่ายบนเซิร์ฟเวอร์ของฉันผ่านคำสั่งนั้นประเด็นของคุณเกี่ยวกับการรีสตาร์ทกระบวนการทำงานใด ๆ ที่จำเป็นต้องรู้ชื่อเซิร์ฟเวอร์นั้นถูกต้อง ตกลงกันว่าการรีสตาร์ทโฮสต์นั้นจะแก้ไขได้ ที่กล่าวว่ามีบางครั้งที่ฉันต้องการเปลี่ยนชื่อโฮสต์ แต่ไม่ต้องการรีบูต มีความคิดเห็นเกี่ยวกับอะไรsudo /etc/init.d/network restartและมีประโยชน์ในการทำให้ชื่อโฮสต์ใหม่มีผลกับการรีบูท w \ out หรือไม่?
Peter Jirak Eldritch

3
@ PeterJirak: ไร้ประโยชน์โดยสิ้นเชิง หากโปรแกรมเหล่านั้น (ซึ่งจำเป็นต้องรู้ชื่อโฮสต์) ไม่ได้สนใจที่จะดูการอัพเดตชื่อโฮสต์ก่อนหน้านี้พวกเขาจะไม่สนใจเลย การบอกให้ระบบกำหนดค่าที่อยู่ IP บน eth0 จะไม่ส่งผลกระทบเลยแม้แต่นิดเดียว
grawity

@PeterJirak คุณหมายถึงอะไรโดย "รับชื่อโฮสต์ใหม่ที่จะมีผล"? ตามที่กล่าวไว้ก่อนหน้านี้จะมีผลทันทีและกระบวนการเริ่มต้นใหม่ใด ๆ จะรับรู้ได้ ฉันไม่เข้าใจเช่นกันว่าทำไมคุณถึงถามเกี่ยวกับการรีสตาร์ทเครือข่าย สิ่งที่เกี่ยวข้องกับชื่อโฮสต์?
Michael Hampton

5
เป็นความเข้าใจผิดที่พบโดยทั่วไปว่า "เครือข่าย" ทั้งหมดเป็นบริการ userspace ที่สามารถเริ่มต้นใหม่ได้เพียงเพราะมีสคริปต์ /etc/init.d ชื่อเช่นนั้น
grawity

2
@ PeterJirak ในฐานะที่เป็นบันทึกด้านการใช้บริการใน/etc/init.dเป็นวิธีที่ผิดในระบบ systemd มันเป็นเพียงแค่นั้นสำหรับความเข้ากันได้ย้อนหลังกับ System V. เก่า
rexkogitans

22

คุณสามารถเปลี่ยนชื่อโฮสต์ในเคอร์เนลได้โดยใช้:

hostname NEWNAME

บน Linux สิ่งนี้มีค่าเท่ากับหนึ่งต่อไปนี้:

sysctl kernel.hostname=NEWNAME

echo NEWNAME > /proc/sys/kernel/hostname

สิ่งนี้ไม่ได้ขึ้นอยู่กับ systemd (ซึ่งแตกต่างจากhostnamectlซึ่งต้องใช้ systemd-hostnamed) หรือเครื่องมือที่ไม่ได้มาตรฐานอื่น ๆ และบ่อยครั้ง (โดยเฉพาะในระบบ shellscript-init) คือการตั้งชื่อโฮสต์เริ่มต้นตั้งแต่แรก

โปรแกรมและบริการส่วนใหญ่ไม่ได้ใช้ชื่อโฮสต์ ส่วนน้อยที่ทำ (เช่น Postfix หรือบริการที่ใช้ Kerberos) สามารถเริ่มใหม่ทีละตัว

(บางโปรแกรมแคชชื่อโฮสต์จนกว่าจะรีสตาร์ทโปรแกรมอื่น ๆ จะสืบค้นทุกครั้งที่ต้องการนอกจากนี้โปรแกรมยังมีความสามารถในการสำรวจความคิดเห็น (2) / proc / sys / kernel / hostname เพื่อรับการแจ้งเตือนการเปลี่ยนแปลง


2
โปรดทราบว่าวิธีการเหล่านี้ไม่คงอยู่และจะไม่สามารถรีบูตได้
Michael Hampton

3
โชคดีที่ OP ได้ครอบคลุมการตั้งคำถามอยู่แล้ว
grawity

1
postfix อาจมีชื่อโฮสต์ฮาร์ดโค้ดในหนึ่งหรือสองแห่งใน /etc/postfix/main.cfและ/etc/mailnameดังนั้นจึงจำเป็นต้องแก้ไขเช่นกัน
Mark Plotnick
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.