Liệu systemd vẫn biết về runlevels?


17

Liệu systemd vẫn có khái niệm về đường băng? Ví dụ như nó là vô nghĩa để sử dụng telinit <number>?


2
Bản sao có thể có của Change runlevel với systemd
Stephen Harris

tôi không biết về các câu trả lời dưới đây, nhưng trong RHEL / CentOS 7,6 init 1hoặc init 3hoặc init 5hoặc init 6hoặc init 0hoặc runlevelvẫn cư xử như họ luôn luôn có, và đó là tất cả những gì quan tâm. Cú pháp dễ dàng hơn nhiều sau đósystemctl blabla blabla.blabla
ron

Câu trả lời:


14

SystemD Run-Level Low-Down

Trong SystemD (aemon), các đường băng được hiển thị dưới dạng "Mục tiêu". Khái niệm vẫn còn đó, nhưng quy trình làm việc để tạo ra kết quả mong muốn cho yêu cầu của bạn là khác nhau.

Các đính kèm nên làm rõ vấn đề này.

Làm cách nào để thay đổi runlevel hiện tại?

$ systemctl isolate runlevelX.target

Làm cách nào để thay đổi runlevel mặc định cho khởi động tiếp theo?

# Create a symlink
$ ln -sf /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
  • ln -sf TARGET DESTINATION
  • -s tạo liên kết tượng trưng
  • -f xóa tệp đích hiện có

HOẶC (như @centimane đề xuất) chỉ cần sử dụng lệnh "may mắn" systemd:

systemctl set-default [target name].target

Làm thế nào để tôi xác định runlevel hiện tại?

$ systemctl list-units --type=target

Chào mừng bạn đến với Unix & Linux! Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
slm

Tôi vẫn có thể sử dụng lệnh init để chuyển đổi giữa các runlevels chứ?
drpaneas

2
Nếu gói systemd của bạn được xây dựng với sự hỗ trợ compat SysV, nó sẽ bao gồm một liên kết telinit đến nhị phân systemd, khi được gọi là telinit, sẽ ánh xạ runlevels 0-6 đến các mục tiêu systemd - kiểm tra telinit (8) để biết danh sách các ánh xạ đó .
Wieland

2
Để thay đổi mục tiêu mặc định, bạn nên sử dụng systemctl set-default [target name].targetthay vì tự tạo liên kết.
Centimane

13

Không. Vì bản thân những người làm hệ thống đã viết hai lần, một lần trong telinitsổ tay của họ và một lần trong runlevelsổ tay của họ , các đường băng là "lỗi thời". Bạn có thể quên về runlevels.

Những điều này thực sự không tồn tại trong systemd, ngoài một vài miếng chêm tương thích.

  • Có một số liên kết tượng trưng cho tên mục tiêu, nhưng những mục tiêu này không bao giờ thực sự được sử dụng bởi systemd thích hợp.
    • Thay vào đó, quá trình bootstrap sử dụng một default.target(và từ đó một hoặc cả hai graphical.targetvà a multi-user.target), a rescue.targethoặc an emergency.target. Và quá trình tắt máy bao gồm a shutdown.target, a reboot.target, a halt.targethoặc a poweroff.target. Không có mục tiêu cấp chạy nào được tham gia vào bootstrap hoặc tắt máy.
    • Các telinitlệnh, mà người ta có thể nghĩ rằng sử dụng khả năng tương thích liên kết tượng trưng để lập bản đồ đối số dòng lệnh của nó, không làm điều đó một trong hai. Có một bảng Hardwired trong mã nguồn của telinitchương trình, và các con số 2, 3, 4, và 5như các đối số cho lệnh được Hardwired để ánh xạ multi-user.targetgraphical.target.
    • systemd-update-utmp cũng có một bảng cứng nội bộ.
  • Không có "bảng init" của công cụ runlevel. systemd chỉ tương thích với van Smoorenburg rc, không tương thích với van Smoorenburg init.
  • Không có giá trị "mức chạy hiện tại" được duy trì bởi chính systemd. Thay vào đó, hầu như hoàn toàn không có giấy tờ systemd-update-utmplệnh hoạt động trong nội bộ về sự hoạt khẳng định của rescue.target, multi-user.targetgraphical.target.
  • systemd-sysv-generator, trình tạo đơn vị dịch vụ tương thích ngược của systemd, hợp nhất các /etc/rc[234].dthư mục thành một Wanted-Bymối quan hệ duy nhất với multi-user.targetcác đơn vị dịch vụ được tạo. Không có tham chiếu thực tế để chạy các cấp trong các đơn vị dịch vụ được tạo. (Trước đây đã có từ nhiều năm trước, nhưng những người làm hệ thống thấy rằng điều này đã sai, vì họ không được tham chiếu ở bất kỳ nơi nào khác.)

Nếu một người là người dùng hệ thống xây dựng systemd như Arch Linux cho người hỏi tại " Tại sao` init 0` lại dẫn đến "Đối số dư thừa" trên cài đặt Arch? ", Thì người ta thậm chí không nhận được các phần mềm tương thích và các lệnh như vậy như init 0kết quả trong "bản địa" hành vi systemd, mà là để phàn nàn rằng các lệnh đã được viện dẫn không chính xác.

đọc thêm


4

Cảm ơn rất nhiều. Vì vậy, nếu tôi hiểu chính xác:

Ví dụ:

ls -ll /usr/lib/systemd/system/runlevel*.target

Đầu ra:

/usr/lib/systemd/system/runlevel0.target -> poweroff.target
/usr/lib/systemd/system/runlevel1.target -> rescue.target
/usr/lib/systemd/system/runlevel2.target -> multi-user.target
/usr/lib/systemd/system/runlevel3.target -> multi-user.target
/usr/lib/systemd/system/runlevel4.target -> multi-user.target
/usr/lib/systemd/system/runlevel5.target -> graphical.target
/usr/lib/systemd/system/runlevel6.target -> reboot.target

Vì vậy, như bạn có thể thấy, khái niệm runlevels tồn tại, nhưng nó khá lỗi thời do thực tế là các tệp runlevel.target không thực sự là các tệp Real real mà là các liên kết mềm đến sơ đồ tệp mới, hiện đại hơn, được đặt tên tốt hơn. systemd thích gọi chúng là mục tiêu của chúng.

Vì vậy, nếu bạn muốn làm sth như thế telinit 5này sẽ như thế này: systemctl isolate runlevel5.target giống hệt với: systemctl isolate graphical.target(được đề xuất theo ý kiến ​​của tôi).

Chỉ trong trường hợp bạn quan tâm để biết tất cả các mục tiêu có thể:

ls /usr/lib/systemd/system/*.target

Vâng, tôi tin rằng bạn đang hiểu điều này một cách chính xác. Tôi sẽ là người áp dụng muộn SystemD, vì hệ thống INIT.D theo thủ tục, từng bước, là điều tôi quen thuộc nhất ... Tôi hoan nghênh rằng bạn đang khám phá SystemD. Phần tốt nhất của SystemD là đa luồng song song, cho phép khởi động nhanh hơn. Khởi động đa luồng có thể được thực hiện bằng INIT.D, nhưng yêu cầu kịch bản BASH mạnh mẽ.
Tyler Maginnis

BTW, ls -lltương đương với ls -l. Bạn có thể muốn có được thói quen sử dụng ls -ld.
G-Man nói 'Phục hồi Monica'

telinit 0/ telinit 6vẫn hoạt động. Vì điều này giúp cho việc di chuyển và tôi nghĩ rằng hầu hết các bản phân phối vẫn chưa thấy lý do để bỏ hỗ trợ. isolaterõ ràng khao khát bắt chước cách thức hoạt động của cấp độ chạy, nhưng có nhiều trường hợp xấu xa khác nhau. Tôi rất khuyên bạn nên bỏ qua tất cả các hướng dẫn đến isolate runlevel5.targethoặc thậm chí isolate graphical.target. Trường hợp cạnh ví dụ: github.com/systemd/systemd/issues/6505
sourcejedi

0

systemd giới thiệu các mục tiêu như là một đối tác cho runlevels trong hệ thống init sysV. Các nhà phát triển sytemd đã làm cho nó gần như tương thích với hầu hết các tập lệnh sysV. Điều tương tự xảy ra cho telinit <runlevel>. Điều này được dịch sang systemd tương đương.

Ví dụ telinit 0tắt nguồn máy. systemd có poweroff.target để làm tương tự như runlevel 0 . Vì vậy, telinit 0được dịch bởi systemd để kích hoạt poweroff.target .

Nhưng một số vấn đề tương thích có ở đó với các hệ thống sytemd và sysV init-> https://www.freedesktop.org/wiki/Software/systemd/Incompatabilities .

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.