Làm cách nào để đổi tên máy chủ Linux mà không cần khởi động lại để đổi tên có hiệu lực?


26

Tôi đã tìm kiếm một câu trả lời cho câu hỏi này trên serverfault và không thể tìm thấy nó. Tôi biết điều đó là có thể, nhưng tôi không thể nhớ làm thế nào để làm điều đó. Làm cách nào để thay đổi tên máy chủ của máy chủ Linux và để thay đổi đó có hiệu lực mà không cần khởi động lại?

Tôi đang sử dụng Ubuntu 16 và Ubuntu 18.

Một tính năng lớn của Ubuntu là máy tính để bàn đồ họa và các tiện ích hệ thống đồ họa. Tuy nhiên, chúng tôi đang chạy Ubuntu trong môi trường sản xuất của chúng tôi vì vậy chúng tôi đã chọn không sử dụng máy tính để bàn đồ họa hoặc các tiện ích để không làm cho các tính năng đó tiêu tốn tài nguyên chúng tôi cần trong môi trường sản xuất của chúng tôi.

Tôi biết rằng để đổi tên máy chủ, tôi chỉnh sửa các tệp:

  • /etc/hostname
  • /etc/hosts

Trong /etc/hostnamemột chỉ cần thay thế tên máy chủ hiện tại (sắp trở thành tên máy chủ cũ) bằng tên máy chủ mới.

Ubuntu trong /etc/hoststập tin có dòng:

127.0.1.1 your-hostname your-hostname

Nó hoạt động như bootstrapping trong khi máy chủ của bạn đang khởi động và thiết lập chính nó trong mạng của bạn. Trước khi thay đổi tên máy chủ, your-hostnamelà tên hiện tại (sắp trở thành tên máy chủ cũ) và là một phần của việc thay đổi tên máy chủ của máy chủ lưu trữ của bạn, người ta sẽ thay thế tên đó bằng tên mới.

Những gì tôi quen thuộc là thực hiện hai bước trên và sau đó khởi động lại máy chủ của bạn. Nhưng nhiều lần, như với một máy chủ sản xuất, người ta muốn thực hiện việc đổi tên đó, nhưng không khởi động lại máy chủ của một người.

Làm cách nào tôi có thể thay đổi tên máy chủ trên máy chủ và để thay đổi đó có hiệu lực mà không cần khởi động lại máy chủ?


1
Không có thứ gọi là "Ubuntu 16" và "Ubuntu 18", có thể có sự khác biệt lớn giữa 16.04 và 16.10 như có từ 16.10 đến 17.04.
ống

Câu trả lời:


49

Bạn có thể thay đổi ý tưởng của kernel về tên máy chủ trên hệ thống dựa trên systemd bằng hostnamectlcông cụ. Ví dụ:

hostnamectl set-hostname whatever

Bạn có thể xem ý tưởng hiện tại của hệ thống về tên máy chủ với:

hostnamectl             # equivalent to hostnamectl status

Hãy nhớ rằng điều này không thay đổi ý tưởng của tên máy chủ đang chạy. Quá trình như vậy sẽ phải kiểm tra lại tên máy chủ để được cập nhật và hầu như không có quy trình nào. Do đó, một quá trình như vậy sẽ cần phải được khởi động lại. Để mọi quá trình bắt đầu sử dụng tên máy chủ mới, chúng phải được khởi động lại. Nói chung, việc khởi động lại hệ thống dễ dàng hơn là khởi động lại mọi dịch vụ riêng lẻ.


1
Tôi có cần khởi động lại mạng trên máy chủ của mình không nếu tôi muốn khởi động lại sau khi đổi tên? Tôi đã tìm thấy điều này: sudo /etc/init.d/network restart Bên cạnh đó, khởi động lại mạng trên máy chủ của tôi thông qua lệnh đó, quan điểm của bạn về việc khởi động lại bất kỳ quy trình đang chạy nào cần biết tên của máy chủ là hợp lệ. Đồng ý rằng khởi động lại máy chủ sẽ khắc phục điều đó. Điều đó nói rằng, có những lúc tôi thực sự muốn đổi tên máy chủ, nhưng thực sự không muốn khởi động lại nó. Bạn có ý kiến ​​gì về sudo /etc/init.d/network restartsự hữu ích của nó trong việc lấy tên máy chủ mới để có hiệu lực khi khởi động lại không?
Peter Jirak Eldritch

3
@PeterJirak: Hoàn toàn vô dụng. Nếu các chương trình đó (cần biết tên máy chủ) trước đây không xem các cập nhật tên máy chủ, thì bây giờ chúng sẽ không làm phiền. Nói hệ thống để cấu hình lại địa chỉ IP trên eth0 sẽ không ảnh hưởng đến điều đó dù chỉ một chút.
grawity

@PeterJirak Ý bạn là gì khi "lấy tên máy chủ mới có hiệu lực"? Như đã thảo luận trước đây, nó có hiệu lực ngay lập tức và bất kỳ quy trình mới được bắt đầu sẽ nhận thức được nó. Tôi cũng không hiểu tại sao bạn hỏi về việc khởi động lại mạng? Điều đó có liên quan gì đến tên máy chủ?
Michael Hampton

5
Đó là một quan niệm sai lầm phổ biến rằng toàn bộ "mạng" là một dịch vụ không gian người dùng có thể được khởi động lại, chỉ vì có một tập lệnh /etc/init.d có tên như vậy.
grawity

2
@PeterJirak Như một lưu ý phụ, chạy các dịch vụ trong /etc/init.dlà cách sai trên các hệ thống systemd. Nó chỉ ở đó để tương thích ngược với Hệ thống V. cũ
rexkogitans

22

Bạn có thể thay đổi tên máy chủ trong kernel bằng cách sử dụng:

hostname NEWNAME

Trên Linux, điều này thực tế tương đương với một trong những điều sau đây:

sysctl kernel.hostname=NEWNAME

echo NEWNAME > /proc/sys/kernel/hostname

Điều này không phụ thuộc vào systemd (không giống như hostnamectl yêu cầu systemd-hostnamed) hoặc bất kỳ công cụ không chuẩn nào khác, và thường (đặc biệt là trong các hệ thống shellscript-init) là cách đặt tên máy chủ ban đầu ở vị trí đầu tiên.

Hầu hết các chương trình và dịch vụ không thực sự sử dụng tên máy chủ; một số ít làm (ví dụ Postfix hoặc dịch vụ sử dụng Kerberos) có thể được khởi động lại từng cái một.

(Một số chương trình lưu trữ tên máy chủ cho đến khi khởi động lại, một số chương trình khác truy vấn nó mỗi khi chúng cần. Chương trình cũng có khả năng thăm dò ý kiến ​​(2) / Proc / sys / kernel / tên máy chủ để nhận thông báo thay đổi, nhưng ít người thực hiện.)


2
Hãy nhớ rằng các phương pháp này không bền bỉ và sẽ không tồn tại khi khởi động lại.
Michael Hampton

3
May mắn thay, OP đã bao gồm sự kiên trì trong chính câu hỏi của họ.
grawity

1
postfix có thể có tên máy chủ được mã hóa cứng ở một hoặc hai nơi /etc/postfix/main.cf/etc/mailnamevì vậy chúng cũng cần được chỉnh sửa.
Đánh dấu Plotnick
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.