Sự khác biệt giữa dịch vụ khởi động lại là gì


74

Tôi đang cố gắng để hiểu sự khác biệt giữa service restart [someservice]service reload [someservice]. Tôi hiểu rằng "khởi động lại" khởi động lại dịch vụ trong khi "tải lại" tải lại cấu hình, nhưng tôi không hiểu ý nghĩa thực tế của việc này đủ để xác định tôi nên sử dụng cái gì trong bối cảnh cụ thể.

Một ví dụ: hầu hết các hướng dẫn tôi đã đọc để thiết lập PostgreSQL đều nói rằng, một khi tôi đã chỉnh sửa postgresql.conf và pg_hba.conf để cho phép kết nối từ xa, tôi nên đưa ra vấn đề sudo service postgresql restart. Tuy nhiên, nếu tôi đoán sử dụng cái nào dựa trên mô tả ở trên, tôi sẽ chọn "tải lại".

Trong trường hợp có vấn đề, tôi đang sử dụng Ubuntu 11.10 - mặc dù tôi hy vọng có thể áp dụng giải thích chung nhất có thể.


2
Một vài năm trước, tôi đang điều hành một máy chủ với vài nghìn người dùng. Khởi động lại Apache không nhanh vì bất kỳ lý do gì, sẽ mất khoảng 3 phút để khởi động lại apache (lý do). Nhưng dù sao, nếu máy chủ ngừng hoạt động trong 3 phút, sếp của tôi sẽ nhận được khoảng 800 cuộc gọi. Với dịch vụ tải lại, 0 cuộc gọi điện thoại. Đó là sự khác biệt.
j0h

Câu trả lời:


41

Những gì bạn nói là chính xác, reloadyêu cầu dịch vụ tải lại các tệp cấu hình của nó. Điều đó có nghĩa là nó phải đủ để tải lại cấu hình; tuy nhiên, có thể có một số dịch vụ nhất định "không tuân theo quy tắc" hoặc sẽ không tải lại các tệp cấu hình. Do đó, bạn có thể an toàn hơn với restart. Cá nhân tôi không sử dụng postgresql, vì vậy tôi không biết.


1
Trong khi đó, córeload-or-restart
Suuuehgi

Đối với PostgreSQL, bạn có thể áp dụng các thay đổi cho /etc/postgresql/version/main/postgresql.conf với tải lại. Áp dụng các thay đổi cho pg_hba.conf yêu cầu khởi động lại.
Aidan Melen

63
  • khởi động lại = dừng + bắt đầu
  • tải lại = vẫn chạy + đọc lại tập tin cấu hình.

8

Không phải tất cả các dịch vụ hỗ trợ reload. Đối với những người làm điều đó, thường là tốt hơn để khởi động lại (tức là tải lại gây ra ít hơn hoặc không có thời gian chết).

Hướng dẫn chính sách Debian chỉ định rằng mọi /etc/init.d/tập lệnh sẽ hỗ trợ một force-reloadhành động, có nghĩa là reloadnếu dịch vụ hỗ trợ nó và restartnếu dịch vụ không hỗ trợ tải lại.

Tôi không chắc nó chuyển sang thế giới mới nổi của Ubuntu như thế nào.


1
Hướng dẫn chính sách Debian thực sự là liên kết hữu ích, cảm ơn.
không phải là bản vá

1
hầu hết hỗ trợ tải lại, nếu không thông qua dịch vụ hệ thống, hãy nghĩ /etc/init.d/SomeProgram tải lại
j0h

4

Để mở rộng عبد النور التومي trả lời với kinh nghiệm của tôi với systemd.

Trong systemd bất cứ khi nào một tiến trình được bắt đầu, nó được chạy trong bối cảnh systemd, ví dụ rõ ràng nhất về điều này là với các biến môi trường được xác định trong tệp đơn vị của nó.

Vì vậy, khi bạn gửi systemctl reload [someservice]tín hiệu, nó sẽ gửi tín hiệu đến dịch vụ để tự tải lại một cách duyên dáng nếu được hỗ trợ. Nếu không, quá trình sẽ đơn giản bỏ qua tín hiệu. Đây là cấu hình mặc dù.

Tôi có ý nghĩa gì với duyên dáng? để bắt đầu các công nhân mới với cấu hình hoặc mã mới và dừng các công nhân cũ khi họ hoàn thành việc phục vụ các yêu cầu hiện tại nếu có.

Và nếu bạn thực hiện systemctl restart [someservice]nó sẽ yêu cầu systemctl báo cho dịch vụ dừng lại, phá hủy bối cảnh systemd hiện tại, tạo một cái mới và chạy lại dịch vụ. Điều này có ý nghĩa ví dụ để tải lại các biến môi trường trong ngữ cảnh systemd hoặc nếu tải lại không được hỗ trợ.

Hy vọng điều này làm rõ một chút và nếu tôi sai trong một cái gì đó xin vui lòng cho tôi biết.


0

hiện tại nếu một dịch vụ cần khởi động (ví dụ: tệp cấu hình đã thay đổi), bạn có thể thông báo cho dịch vụ, nhưng điều này dẫn đến khởi động lại. Sẽ thật tuyệt nếu tải lại được thực hiện nếu dịch vụ đã chạy (mặc dù tôi cho rằng có một số dịch vụ yêu cầu khởi động lại cho một số tệp, tải lại cho các dịch vụ khác).

Ví dụ phức tạp nhất mà tôi có thể nghĩ ra là một thứ giống như Apache. Thông thường bạn chỉ có thể yêu cầu nó tải lại, tuy nhiên đôi khi bạn cần yêu cầu khởi động lại thay thế (nếu bạn thêm / xóa các mô-đun chẳng hạn).


0

postgres là một ví dụ tốt cho sự khác biệt lớn giữa tải lại và khởi động lại, vì sau này phải ngắt kết nối tất cả các máy khách cơ sở dữ liệu.

khi các kết nối không được khôi phục, ban đầu bạn có thể dừng dịch vụ mà không có "--force" bằng cách sử dụng pg_ctlcluster .

trong /etc/postgres/{version}/{dbname}/postgresql.conf và tại http://www.postgresql.org/docs/manuals/ mỗi tham số có một nhận xét như "Tham số này chỉ có thể được thiết lập khi khởi động máy chủ. "

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.