Và bây giờ, câu trả lời systemd.
Bạn đang sử dụng, theo thẻ trên câu hỏi của bạn, Red Hat Enterprise Linux. Kể từ phiên bản 7, đã sử dụng systemd. Không có câu trả lời nào khác đúng cho thế giới của systemd; thậm chí không phải là một số giả định trong câu hỏi của bạn.
- Quên về đường băng ; chúng tồn tại, nhưng chỉ như các miếng chêm tương thích. Tài liệu systemd nói rằng khái niệm này là "lỗi thời". Nếu bạn đang bắt đầu tìm hiểu công cụ này trên hệ điều hành systemd, đừng bắt đầu ở đó.
- Hãy quên đi trang hướng dẫn mà marcelm trích dẫn; nó hoàn toàn không phải từ bộ công cụ phù hợp và là một mô tả về lệnh của bộ công cụ khác, không chính xác cho systemd. Đây là một trong những
halt
lệnh cho các init
tiện ích "Hệ thống 5" của van Smoorenburg .
- Bỏ qua các tuyên bố
/sbin/halt
là một liên kết tượng trưng đến /sbin/reboot
; Điều đó không đúng với systemd. Không có reboot
chương trình riêng biệt nào cả.
- Bỏ qua các câu lệnh
halt
hoặc reboot
gọi một shutdown
chương trình với các đối số dòng lệnh; chúng cũng không đúng với systemd. Không có shutdown
chương trình riêng biệt nào cả.
Mỗi bộ công cụ quản lý hệ thống có phiên bản của các tiện ích này. systemd, mới nổi, quà vặt , van Smoorenburg init
, và BSD init
tất cả đều có riêng của họ halt
, poweroff
và vân vân. Trên mỗi cơ học của họ là hơi khác nhau. Các trang hướng dẫn của họ cũng vậy.
Trong bộ công cụ systemd halt
, poweroff
,reboot
, telinit
, và shutdown
là tất cả các liên kết tượng trưng đến /bin/systemctl
. Chúng đều là các miếng chêm tương thích ngược, chỉ đơn giản là các tốc ký để gọi giao diện dòng lệnh chính của systemd : systemctl
. Tất cả đều ánh xạ tới (và trên thực tế là) cùng một chương trình. (Theo quy ước, shell cho nó biết tên mà nó đã được gọi bởi.)
mục tiêu, không phải đường băng
Hầu hết các lệnh đó là các tốc ký để báo cho systemd, bằng cách sử dụng systemctl
, để cô lập một mục tiêu cụ thể . Cách ly được giải thích trong systemctl
trang hướng dẫn (qv), nhưng có thể, vì mục đích của câu trả lời này, được cho là bắt đầu một mục tiêu và ngăn chặn bất kỳ mục tiêu nào khác. Các mục tiêu tiêu chuẩn được sử dụng trong systemd được liệt kê trên systemd.special
trang hướng dẫn (8).
Các sơ đồ trên bootup
trang hướng dẫn (7) trong bộ công cụ systemd, đặc biệt là trang cuối cùng, cho thấy có ba mục tiêu "cuối cùng" có liên quan ở đây:
halt.target
- Khi hệ thống đã đạt đến trạng thái cách ly hoàn toàn mục tiêu này, nó sẽ gọi reboot(RB_HALT_SYSTEM)
cuộc gọi hệ thống. Hạt nhân sẽ cố gắng vào một chương trình giám sát ROM, hoặc đơn giản là tạm dừng CPU (sử dụng bất kỳ cơ chế nào phù hợp để làm như vậy).
reboot.target
- Khi hệ thống đã đạt đến trạng thái cô lập hoàn toàn mục tiêu này, nó sẽ gọi reboot(RB_AUTOBOOT)
cuộc gọi hệ thống (hoặc tương đương với dòng lệnh ma thuật). Nhân sẽ cố gắng kích hoạt khởi động lại.
poweroff.target
- Khi hệ thống đã đạt đến trạng thái cách ly hoàn toàn mục tiêu này, nó sẽ gọi reboot(RB_POWER_OFF)
cuộc gọi hệ thống. Hạt nhân sẽ cố gắng loại bỏ nguồn điện khỏi hệ thống, nếu có thể.
Đây là những điều mà bạn nên suy nghĩ như là trạng thái hệ thống cuối cùng, không phải chạy cấp độ. Lưu ý từ sơ đồ rằng chính hệ thống đích systemd mã hóa những thứ mà trong các hệ thống khác, ẩn chứ không rõ ràng: chẳng hạn như khái niệm rằng mỗi mục tiêu cuối cùng này bao gồm shutdown.target
mục tiêu, để một mô tả các dịch vụ phải được dừng trước khi tắt có chúng mâu thuẫn với các shutdown.target
mục tiêu.
systemctl
cố gắng gửi yêu cầu đến systemd-logind
khi người dùng gọi không phải là siêu người dùng. Nó cũng vượt qua sự tắt máy bị trì hoãn qua systemd-shutdownd
. Và một số wall
thông báo kích hoạt thông báo. Những sự phức tạp đó sang một bên, sẽ khiến câu trả lời này dài hơn nhiều lần, giả sử rằng bạn hiện đang là siêu người dùng và không yêu cầu một hành động theo lịch trình:
systemctl isolate halt.target
có các tốc ký:
shutdown -H now
systemctl halt
- đồng bằng
halt
systemctl isolate reboot.target
có các tốc ký:
shutdown -r now
telinit 6
systemctl reboot
- đồng bằng
reboot
systemctl isolate poweroff.target
có các tốc ký:
shutdown -P now
telinit 0
shutdown now
systemctl poweroff
- đồng bằng
poweroff
systemctl isolate rescue.target
có các tốc ký:
telinit 1
systemctl rescue
systemctl isolate multi-user.target
có các tốc ký:
telinit 2
telinit 3
telinit 4
systemctl isolate graphical.target
có tốc ký:
Sau khi phân tích cú pháp các dòng lệnh khác nhau khác nhau, cuối cùng tất cả chúng đều kết thúc trong cùng một đường dẫn mã bên trong systemctl
chương trình.
Ghi chú:
- Hành vi truyền thống của tùy chọn ít hơn
shutdown now
là chuyển sang chế độ một người dùng . Đây không phải là trường hợp với systemd. rescue.target
- chế độ một người dùng được đổi tên thành chế độ cứu trong systemd - không thể truy cập bằng shutdown
lệnh.
telinit
thực sự không hoàn toàn bỏ qua tất cả những và liên kết tượng trưng trong hệ thống tập tin mà các trang hướng dẫn mô tả. Các ánh xạ aforgiven được gắn vào chương trình, trong một bảng.runlevelN.target
default.target
systemctl
- systemd không có khái niệm về mức chạy hiện tại . Hoạt động của các lệnh này không có điều kiện dựa trên bất kỳ "nếu bạn đang ở cấp độ N ".
- Các
--force
tùy chọn vào halt
, reboot
và poweroff
lệnh cũng giống như nói --force --force
đến systemctl halt
, systemctl reboot
và systemctl poweroff
lệnh. Điều này làm cho systemctl
cố gắng gọi reboot()
trực tiếp. Thông thường nó chỉ cố gắng cô lập mục tiêu.
telinit
không giống như init
. Chúng là các chương trình khác nhau trong thế giới systemd, sau này là tên gọi khác của systemd
chương trình, không phải cho systemctl
chương trình. Các systemd
chương trình không nhất thiết phải biên soạn với bất kỳ khả năng tương thích van Smoorenburg ở tất cả, và trên một số hệ điều hành systemd phàn nàn về việc bị gọi sai nếu ai đó cố gắng .init N
đọc thêm