systemd ยังรู้เกี่ยวกับ runlevels หรือไม่?


17

systemd ยังคงมีแนวคิดของ runlevels หรือไม่? ตัวอย่างเช่นมันไม่มีประโยชน์ที่จะใช้telinit <number>?


2
อาจเป็นไปได้ซ้ำกับChange runlevel ด้วย systemd
Stephen Harris

ฉันไม่ทราบเกี่ยวกับคำตอบดังต่อไป แต่ใน RHEL / Centos 7.6 init 1หรือinit 3หรือinit 5หรือinit 6หรือinit 0หรือrunlevelยังคงทำงานตามที่พวกเขาเคยมีและนั่นคือทั้งหมดที่ผมดูแลเกี่ยวกับ มากไวยากรณ์ง่ายขึ้นแล้วsystemctl blabla blabla.blabla
รอน

คำตอบ:


14

SystemD ระดับการเรียกใช้ต่ำลง

ภายใน SystemD (aemon) runlevels จะถูกเปิดเผยเป็น "เป้าหมาย" แนวคิดยังคงมีอยู่ แต่เวิร์กโฟลว์เพื่อสร้างผลลัพธ์ที่ต้องการสำหรับความต้องการของคุณนั้นแตกต่างกัน

สิ่งที่แนบควรชี้แจงปัญหานี้

ฉันจะเปลี่ยน runlevel ปัจจุบันได้อย่างไร

$ systemctl isolate runlevelX.target

ฉันจะเปลี่ยน runlevel เริ่มต้นสำหรับการบูตครั้งต่อไปได้อย่างไร

# Create a symlink
$ ln -sf /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
  • ln -sf TARGET DESTINATION
  • -s สร้างลิงค์สัญลักษณ์
  • -f ลบไฟล์ปลายทางที่มีอยู่

หรือ (ตามที่แนะนำ @centimane) เพียงใช้systemdคำสั่ง"ความสุข" :

systemctl set-default [target name].target

ฉันจะระบุ runlevel ปัจจุบันได้อย่างไร

$ systemctl list-units --type=target

ฉันยังสามารถใช้คำสั่ง init เพื่อสลับไปมาระหว่าง runlevels ได้หรือไม่?
drpaneas

2
หากแพ็กเกจ systemd ของคุณถูกสร้างขึ้นด้วย SysV compat ที่รองรับมันจะรวม telinit symlink กับ systemd binary ซึ่งเมื่อเรียกว่า telinit จะแมป runlevels 0-6 กับเป้าหมาย systemd - ตรวจสอบ telinit (8) สำหรับรายการการแมปเหล่านั้น .
วีแลนด์

2
หากต้องการเปลี่ยนเป้าหมายเริ่มต้นคุณควรใช้systemctl set-default [target name].targetแทนที่จะสร้างลิงค์ด้วยตนเอง
Centimane

13

ไม่ได้เมื่อคน systemd เขียนเองมากกว่าสองครั้งหนึ่งครั้งในtelinitคู่มือของพวกเขาและอีกครั้งในrunlevelคู่มือของพวกเขาrunlevels เป็น "ล้าสมัย" คุณสามารถลืม runlevels ได้

สิ่งเหล่านี้ไม่มีอยู่จริงใน systemd เลยด้วยความเข้ากันได้บางอย่าง

  • มีลิงก์สัญลักษณ์สำหรับชื่อเป้าหมาย แต่เป้าหมายเหล่านี้ไม่เคยใช้จริงโดย systemd ที่เหมาะสม
    • แต่ขั้นตอนการบูตพนักงานdefault.target(และที่นั่นหนึ่งหรือทั้งสองของgraphical.targetและmulti-user.target) เป็นหรือrescue.target emergency.targetและการปิดระบบที่เกี่ยวข้องกับshutdown.targetการreboot.targetมีหรือ halt.target ไม่มีเป้าหมายระดับการทำงานที่เกี่ยวข้องใน bootstrap หรือปิดเครื่องpoweroff.target
    • telinitคำสั่งซึ่งหนึ่งอาจคิดว่าการใช้การทำงานร่วมกันเชื่อมโยงสัญลักษณ์เพื่อแมอาร์กิวเมนต์บรรทัดคำสั่งของตนไม่ได้ทำอย่างใดอย่างหนึ่ง มีตารางเดินสายในรหัสที่มาของการเป็นtelinitโปรแกรมและตัวเลข2, 3, 4และ5เป็นข้อโต้แย้งคำสั่งที่มีการเดินสายไปยังแผนที่ไปและmulti-user.targetgraphical.target
    • systemd-update-utmp ยังมีตารางเดินสายภายใน
  • ไม่มี "init table" ของสิ่งที่มีเลเวล systemd เป็นเพียงเข้ากันได้กับรถตู้ Smoorenburg rcไม่ได้กับรถตู้ initSmoorenburg
  • ไม่มีค่า "ระดับการรันปัจจุบัน" ที่ดูแลโดย systemd เอง แต่เกือบจะไม่มีเอกสารในเครือsystemd-update-utmpคำสั่งดำเนินการภายในในแง่ของรัฐที่เปิดใช้งานrescue.target, และmulti-user.targetgraphical.target
  • systemd-sysv-generatorตัวสร้างหน่วยบริการความเข้ากันได้แบบย้อนหลังของ systemd รวม/etc/rc[234].dไดเรกทอรีเป็นเพียงWanted-Byความสัมพันธ์เดียวกับmulti-user.targetในหน่วยบริการที่สร้างขึ้น ไม่มีการอ้างอิงจริงเพื่อเรียกใช้ระดับในหน่วยบริการที่สร้างขึ้น (เคยเป็นเมื่อหลายปีก่อน แต่คนในระบบพบว่าสิ่งนี้ผิดพลาดเพราะพวกเขาไม่ได้ถูกอ้างถึงที่อื่น)

หากใครเป็นผู้ใช้ของระบบที่สร้าง systemd เช่นเดียวกับ Arch Linux สำหรับผู้ถามที่ " ทำไม` init 0` ส่งผลให้ "อาร์กิวเมนต์ส่วนเกิน" ในการติดตั้ง Arch "หนึ่งไม่ได้รับ shims เข้ากันได้และคำสั่งดังกล่าว เป็นinit 0ผลให้เกิดพฤติกรรม systemd "ดั้งเดิม" ซึ่งจะบ่นว่าคำสั่งได้รับการเรียกอย่างไม่ถูกต้อง

อ่านเพิ่มเติม


4

ขอบคุณมาก ๆ. ดังนั้นถ้าฉันเข้าใจถูกต้อง:

ตัวอย่างเช่น:

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

เอาท์พุท:

/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

ดังนั้นอย่างที่คุณเห็นแนวคิดของ runlevels มีอยู่ แต่มันค่อนข้างล้าสมัยเนื่องจากความจริงที่ว่าไฟล์ runlevel.target ไม่ใช่ไฟล์ "ของจริง" จริง ๆ แต่เป็นการเชื่อมโยงที่อ่อนนุ่มเพื่อโครงร่างของไฟล์ใหม่ที่ทันสมัย systemd ชอบที่จะเรียกพวกเขาว่า "เป้าหมาย"

ดังนั้นหากคุณต้องการทำ sth เหมือนtelinit 5จะเป็นเช่นนี้systemctl isolate runlevel5.target ซึ่งเหมือนกับ: systemctl isolate graphical.target(แนะนำในความคิดของฉัน)

ในกรณีที่คุณสนใจรู้เป้าหมายที่เป็นไปได้ทั้งหมด:

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

ใช่ฉันเชื่อว่าคุณเข้าใจอย่างถูกต้อง ฉันจะรับช่วงปลายของ SystemD เนื่องจากขั้นตอนขั้นตอนขั้นตอนระบบ INIT.D เป็นสิ่งที่ฉันคุ้นเคยมากที่สุด ... ฉันปรบมือว่าคุณกำลังสำรวจ SystemD ส่วนที่ดีที่สุดของ SystemD คือการมัลติเธรดแบบขนานซึ่งทำให้สามารถบูตได้เร็วขึ้น การบูต Multi-Threading สามารถทำได้ด้วย INIT.D แต่ต้องใช้สคริปต์ BASH ที่รัดกุม
Tyler Maginnis

BTW, เทียบเท่ากับls -ll คุณอาจต้องการที่จะได้รับเป็นนิสัยของการใช้ls -l ls -ld
G-Man กล่าวว่า 'Reinstate Monica'

telinit 0/ telinit 6ยังคงทำงาน เนื่องจากสิ่งนี้ช่วยในเรื่องการย้ายถิ่นและฉันคิดว่า distros ส่วนใหญ่ยังไม่เห็นเหตุผลที่จะยกเลิกการสนับสนุน isolateเห็นได้ชัดว่ามีแรงบันดาลใจในการเลียนแบบการทำงานของระดับการวิ่ง ผมขอแนะนำให้ไม่สนใจคำแนะนำทั้งหมดไปหรือแม้กระทั่งisolate runlevel5.target isolate graphical.targetตัวอย่างขอบเคส: github.com/systemd/systemd/issues/6505
sourcejedi

0

systemd แนะนำเป้าหมายในฐานะคู่หูสำหรับrunlevelsในระบบ init sysV ผู้พัฒนา sytemd ทำให้เกือบเข้ากันได้กับสคริปต์ sysV ส่วนใหญ่ กันเกิดขึ้นสำหรับ telinit <runlevel>เดียวกันที่เกิดขึ้นสำหรับสิ่งนี้ถูกแปลเป็น systemd ที่เทียบเท่า

ตัวอย่างเช่นtelinit 0ปิดเครื่อง systemd มีpoweroff.targetที่จะทำเช่นเดียวกับrunlevel 0 ดังนั้นtelinit 0จะแปลโดย systemd เพื่อเปิดใช้งานpoweroff.target

แต่บางปัญหาความเข้ากันจะมีกับ sytemd และ SysV init Systems-> https://www.freedesktop.org/wiki/Software/systemd/Incompatibilities

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