มันจะปรากฏsystemdเป็นร้อนใหม่initระบบในบล็อกเดียวกับพุ่งพรวดเป็นไม่กี่ปีที่ผ่านมา ข้อดี / ข้อเสียของแต่ละข้อคืออะไร? นอกจากนี้แต่ละระบบยังเปรียบเทียบกับระบบเริ่มต้นอื่น ๆ ได้อย่างไร
มันจะปรากฏsystemdเป็นร้อนใหม่initระบบในบล็อกเดียวกับพุ่งพรวดเป็นไม่กี่ปีที่ผ่านมา ข้อดี / ข้อเสียของแต่ละข้อคืออะไร? นอกจากนี้แต่ละระบบยังเปรียบเทียบกับระบบเริ่มต้นอื่น ๆ ได้อย่างไร
คำตอบ:
คำตอบส่วนใหญ่ที่นี่มีอายุห้าขวบจึงถึงเวลาสำหรับการอัปเดตบางอย่าง
อูบุนตูเคยใช้งานเครื่องพุ่งพรวดโดยปริยาย แต่พวกเขาก็ทิ้งไว้เมื่อปีที่แล้วเพื่อประโยชน์ของ systemd - ดู:
เนื่องจากการที่มีบทความดี ๆSystemd สำหรับผู้ใช้พุ่งพรวดบน Ubuntu wiki - การเปรียบเทียบรายละเอียดมากระหว่าง upstart และ systemd และคู่มือการเปลี่ยนจากพุ่งพรวดเป็น systemd
(โปรดทราบว่าตามวิกิ Ubuntuคุณยังสามารถเรียกใช้พุ่งพรวดบน Ubuntu รุ่นปัจจุบันโดยค่าเริ่มต้นโดยการติดตั้งupstart-sysv
และเรียกใช้sudo update-initramfs -u
แต่พิจารณาขอบเขตของโครงการ systemd ฉันไม่ทราบวิธีการทำงานในทางปฏิบัติหรือไม่ว่า systemd เป็นหรือไม่ สามารถถอนการติดตั้ง)
ข้อมูลส่วนใหญ่ในส่วนคำสั่งและสคริปต์ด้านล่างได้รับการดัดแปลงจากตัวอย่างบางส่วนที่ใช้ในบทความนั้น (ซึ่งได้รับอนุญาตอย่างสะดวกสบายเช่นเดียวกับการมีส่วนร่วมของผู้ใช้ Stack Exchange ภายใต้สิทธิ์การใช้งาน Creative Commons Attribution-ShareAlike 3.0 )
นี่คือการเปรียบเทียบคำสั่งทั่วไปและสคริปต์อย่างง่าย ๆ ดูหัวข้อด้านล่างสำหรับคำอธิบายโดยละเอียด คำตอบนี้เป็นการเปรียบเทียบพฤติกรรมเก่าของระบบที่ใช้ระบบพุ่งพรวดกับพฤติกรรมใหม่ของระบบที่ใช้ระบบตามที่ถามในคำถาม แต่โปรดทราบว่าคำสั่งที่ติดแท็กเป็น "ระบบพุ่งพรวด" ไม่จำเป็นต้องเป็นระบบพุ่งพรวดเฉพาะ - เป็นเรื่องปกติสำหรับทุกระบบที่ไม่ใช่ systemd Linux และ Unix
su
machinectl shell
(ดูหัวข้อ "การแทนที่คำสั่ง su" ด้านล่าง)
screen
systemd-run --user --scope screen
(ดูส่วน "การฆ่ากระบวนการพื้นหลังที่ไม่คาดคิด" ด้านล่าง)
tmux
systemd-run --user --scope tmux
(ดูส่วน "การฆ่ากระบวนการพื้นหลังที่ไม่คาดคิด" ด้านล่าง)
start foo
systemctl start foo
stop foo
systemctl stop foo
restart foo
systemctl restart foo
initctl list
systemctl status
init-checkconf /etc/init/foo.conf
systemd-analyze verify /lib/systemd/system/foo.service
initctl list-env
systemctl show-environment
initctl set-env foo=bar
systemctl set-environment foo=bar
initctl unset-env foo
systemctl unset-environment foo
ในพุ่งพรวดบันทึกเป็นไฟล์ข้อความปกติในไดเรกทอรี / var / log / upstart ดังนั้นคุณสามารถประมวลผลได้ตามปกติ:
cat /var/log/upstart/foo.log
tail -f /var/log/upstart/foo.log
ในบันทึกของ systemd จะถูกเก็บไว้ในรูปแบบไบนารีภายใน (ไม่ใช่ไฟล์ข้อความ) ดังนั้นคุณต้องใช้journalctl
คำสั่งเพื่อเข้าถึง:
sudo journalctl -u foo
sudo journalctl -u foo -f
ตัวอย่างสคริปต์ธรรมดาที่เขียนใน/etc/init/foo.conf
:
description "Job that runs the foo daemon"
start on runlevel [2345]
stop on runlevel [016]
env statedir=/var/cache/foo
pre-start exec mkdir -p $statedir
exec /usr/bin/foo-daemon --arg1 "hello world" --statedir $statedir
ตัวอย่างสคริปต์ systemd ที่เขียนใน/lib/systemd/system/foo.service
:
[Unit]
Description=Job that runs the foo daemon
Documentation=man:foo(1)
[Service]
Type=forking
Environment=statedir=/var/cache/foo
ExecStartPre=/usr/bin/mkdir -p ${statedir}
ExecStart=/usr/bin/foo-daemon --arg1 "hello world" --statedir ${statedir}
[Install]
WantedBy=multi-user.target
การsu
แทนที่คำสั่งถูกรวมเข้ากับ systemd ในคำขอดึง # 1022:
เพราะตามเลนนาร์ตโพ็ตเตอริ ง , "su เป็นจริงแนวคิดเสีย"
เขาอธิบายว่า"คุณสามารถใช้ su sudo และเป็นมาก่อน แต่ไม่ได้คาดหวังว่ามันจะทำงานในเต็มรูปแบบ "
วิธีการอย่างเป็นทางการเพื่อให้บรรลุsu
พฤติกรรมที่คล้ายกันคือตอนนี้:
machinectl shell
มีการอธิบายเพิ่มเติม โดย Lennart Poettering ในการอภิปรายเพื่อออก # 825:
"มีการพูดคุยกันมานานเกี่ยวกับเรื่องนี้ แต่ปัญหาก็คือสิ่งที่ซูควรทำนั้นไม่ชัดเจนมาก [... ] เรื่องสั้นเรื่องสั้น: su เป็นแนวคิดที่แตกสลายจริง ๆ แล้วมันจะทำให้คุณเป็นเหมือนเปลือกหอย และมันก็ดีที่จะใช้มัน แต่นั่นไม่ใช่การเข้าสู่ระบบที่สมบูรณ์และไม่ควรเข้าใจผิดว่าเป็นอย่างใดอย่างหนึ่ง " - Lennart Poettering
ดูสิ่งนี้ด้วย:
คำสั่งที่ชอบ:
ไม่ทำงานตามที่คาดไว้ ตัวอย่างเช่นnohup
เป็นคำสั่ง POSIX เพื่อให้แน่ใจว่ากระบวนการทำงานต่อไปหลังจากที่คุณออกจากระบบ มันไม่ทำงานบน systemd อีกต่อไป นอกจากนี้โปรแกรมที่ต้องการscreen
และtmux
จำเป็นต้องเรียกใช้ในลักษณะพิเศษมิฉะนั้นกระบวนการที่คุณใช้กับโปรแกรมจะถูกฆ่า (ในขณะที่ไม่ได้รับกระบวนการที่ถูกฆ่ามักเป็นสาเหตุหลักของการเรียกใช้หน้าจอหรือ tmux ในตอนแรก)
นี่ไม่ใช่ความผิดพลาด แต่เป็นการตัดสินใจโดยเจตนาดังนั้นจึงไม่น่าจะมีการแก้ไขในอนาคต นี่คือสิ่งที่ Lennart Poettering พูดเกี่ยวกับปัญหานี้:
ในมุมมองของฉันมันค่อนข้างแปลกที่ UNIX นั้นโดยค่าเริ่มต้นปล่อยให้รหัสผู้ใช้เองตามอำเภอใจไม่ จำกัด หลังจากออกจากระบบ ได้มีการพูดคุยกันมานานแล้วในหมู่คน OS หลาย ๆ คนซึ่งสิ่งนี้ควรเป็นไปได้ แต่ไม่แน่นอนว่าเป็นค่าเริ่มต้น แต่ไม่มีใครกล้าที่จะพลิกสวิตช์เพื่อเปลี่ยนจากค่าเริ่มต้นเป็นตัวเลือก การไม่ทำความสะอาดเซสชันผู้ใช้หลังจากออกจากระบบไม่เพียง แต่น่าเกลียดและค่อนข้างแฮ็ก แต่ยังเป็นปัญหาด้านความปลอดภัย ในที่สุด systemd 230 ก็พลิกสวิตช์และในที่สุดก็ทำความสะอาดทุกอย่างได้อย่างถูกต้องเมื่อผู้ใช้ออกจากระบบ
สำหรับข้อมูลเพิ่มเติมดู:
ในทางที่ systemd ทำงานไปข้างหลัง - ในงานพุ่งพรวดเริ่มต้นทันทีที่พวกเขาสามารถและในงาน systemd เริ่มเมื่อพวกเขาต้อง ในตอนท้ายของวันงานเดียวกันสามารถเริ่มต้นได้โดยทั้งสองระบบและในลำดับเดียวกัน แต่คุณคิดว่ามันมองจากทิศทางตรงกันข้ามเพื่อพูด
นี่คือวิธีที่Systemd สำหรับผู้ใช้พุ่งพรวดอธิบาย:
รูปแบบของการพุ่งพรวดสำหรับกระบวนการเริ่มต้น (งาน) คือ "โลภเหตุการณ์ตาม" นั่นคืองานที่มีอยู่ทั้งหมดซึ่งเหตุการณ์เริ่มต้นเกิดขึ้นจะเริ่มเร็วที่สุดเท่าที่จะเป็นไปได้ ในระหว่างการบูตการพุ่งพรวดสังเคราะห์เหตุการณ์เริ่มต้นบางอย่างเช่นการเริ่มต้นหรือ rcS เป็น "ทรีราก" บริการเริ่มต้นที่จะเริ่มต้นเหล่านั้นและบริการในภายหลังจะเริ่มต้นเมื่ออดีตกำลังทำงานอยู่ งานใหม่เพียงต้องการติดตั้งไฟล์กำหนดค่าลงใน / etc / init / เพื่อให้สามารถใช้งานได้
โมเดลของsystemdสำหรับกระบวนการเริ่มต้น (หน่วย) คือ "อิงการพึ่งพาแบบอิง" คือหน่วยจะเริ่มทำงานก็ต่อเมื่อและเมื่อยูนิตเริ่มต้นอื่น ๆ ขึ้นอยู่กับมัน ในระหว่างการบู๊ต systemd จะเริ่ม "รูทยูนิต" (default.target สามารถแทนที่ได้ในด้วง) ซึ่งจะขยายและเริ่มขึ้นต่อเนื่อง หน่วยใหม่ต้องเพิ่มตัวเองเป็นการพึ่งพาหน่วยของลำดับการบู๊ต (โดยทั่วไปคือ multi-user.target) เพื่อให้สามารถใช้งานได้
ตอนนี้มีข้อมูลล่าสุดตาม Wikipedia:
(ดูวิกิพีเดียสำหรับข้อมูลล่าสุด)
ในอดีตที่ผ่านส้อมของ Debian ได้รับการเสนอเพื่อหลีกเลี่ยงการ systemd Devuan GNU + ลินุกซ์ถูกสร้างขึ้น - แยกของ Debian โดยไม่ต้อง systemd (ขอบคุณfpmurphy1สำหรับการชี้มันออกมาในการแสดงความคิดเห็น)
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการโต้แย้งนี้ดู:
อย่างที่หลายคนอาจจะรู้แล้วการออกเสียงลงคะแนน Init GR Debian ที่ได้รับการสนับสนุนโดย Ian Jackson นั้นไม่มีประโยชน์ในการปกป้องมรดกของ Debian และผู้ใช้จากหิมะถล่ม systemd
สถานการณ์นี้ทำให้เกิดการล็อคในการพึ่งพา systemd ซึ่งเป็นสิ่งที่คุกคามความเป็นอิสระของการพัฒนาและมีผลกระทบร้ายแรงสำหรับ Debian, ต้นน้ำและปลายน้ำ
CTTE จัดการเพื่อสลับการพึ่งพาและทำให้เรามีเวลาในการติดตั้ง systemd ผ่าน sysvinit ที่ละเอียดอ่อน แต่กระบวนการนี้ก็เหนื่อยและเต็มไปด้วยละคร ในที่สุดหนึ่งสัปดาห์ที่ผ่านมา Ian Jackson ลาออก [ ... ]
ฉันลาออกจากคณะกรรมการด้านเทคนิคโดยมีผลทันที
ในขณะที่มันเป็นสิ่งสำคัญที่มุมมองของ 30-40% ของโครงการที่เห็นด้วยกับฉันควรจะยังคงเป็นตัวแทนใน TC ฉันเองก็เห็นได้ชัดว่าการโต้เถียงมากเกินไปตัวเลข ณ จุดนี้ที่จะทำ ฉันควรหลีกเลี่ยงการพยายามลดขอบเขตการสนทนาเกี่ยวกับการกำกับดูแลของโครงการให้เป็นแบบส่วนบุคคล [ ... ]
Devuan เกิดจากการทะเลาะวิวาทกับการตัดสินใจใช้เป็นระบบเริ่มต้นสำหรับเดเบียน ตำแหน่งอย่างเป็นทางการใน Debian systemdเต็มของการเรียกร้องที่คนอื่น ๆ ได้ debunked ผู้อ่านที่สนใจสามารถดำเนินการต่อการอภิปรายหัวข้อร้อนนี้ในการโต้เถียง systemd อย่างไรก็ตามเราขอแนะนำให้คุณรักษาความสงบและเสียงของคุณ ที่ Devuan เราสนใจที่จะเขียนโปรแกรมผิดมากกว่ามองย้อนกลับไป [ ... ]
มีการสร้างเว็บไซต์และบทความบางส่วนสำหรับข้อพิพาทของ systemd:
มีการสนทนาที่น่าสนใจมากมายเกี่ยวกับ Hacker News:
แนวโน้มที่คล้ายกันใน distros อื่น ๆ สามารถสังเกตได้เช่นกัน:
พุ่งพรวดตามปรัชญา Unix ของ DOTADIW - "ทำสิ่งหนึ่งและทำมันได้ดี" มันเป็นการทดแทนสำหรับ init daemon ดั้งเดิม มันไม่ได้ทำอะไรนอกจากการเริ่มและหยุดบริการ งานอื่น ๆ จะมอบหมายให้กับระบบย่อยพิเศษอื่น ๆ
systemdทำอะไรได้มากกว่านั้น นอกจากการเริ่มและหยุดบริการแล้วยังจัดการรหัสผ่านการล็อกอินเทอร์มินัลการจัดการพลังงานรีเซ็ตโรงงานการประมวลผลบันทึกจุดเมานท์ระบบไฟล์ระบบเครือข่ายและอื่น ๆ อีกมากมาย - ดูไฟล์NEWSสำหรับคุณสมบัติบางอย่าง
ตามมุมมองของ systemd สิ่งที่ประสบความสำเร็จและการนำเสนอสิ่งที่อยู่ข้างหน้าโดย Lennart Poettering ในปี 2014 ที่ GNOME.asia นี่คือวัตถุประสงค์หลักของ systemd พื้นที่ที่ครอบคลุมแล้วและที่ยังดำเนินอยู่:
วัตถุประสงค์ของเรา
- เปลี่ยน Linux จากถุงบิตให้เป็นระบบปฏิบัติการเอนกประสงค์
- การสร้างระบบปฏิบัติการรุ่นต่อไปของอินเทอร์เน็ตการรวมความแตกต่างอย่างไม่มีจุดหมายระหว่างการกระจาย
นำนวัตกรรมกลับสู่ระบบปฏิบัติการหลัก
เดสก์ท็อป, เซิร์ฟเวอร์, คอนเทนเนอร์, เอ็มเบ็ดเด็ด, มือถือ, คลาวด์, คลัสเตอร์, . . พื้นที่เหล่านี้อยู่ใกล้กันมากกว่าที่คุณคิด
- ลดความซับซ้อนของผู้ดูแลระบบความน่าเชื่อถือโดยไม่มีการดูแล
- ทุกอย่างครุ่นคิด
- การค้นพบอัตโนมัติแบบพลักแอนด์เพลย์เป็นกุญแจสำคัญ
- เราแก้ไขสิ่งที่พวกเขาถูกทำลายไม่เคยปิดบังพวกเขา
สิ่งที่เราครอบคลุมอยู่แล้ว:
ระบบ init, การบันทึกเจอร์นัล, การจัดการล็อกอิน, การจัดการอุปกรณ์, การจัดการไฟล์ชั่วคราวและการระเหย, การลงทะเบียนรูปแบบไบนารี, บันทึก / เรียกคืนแบ็คไลท์, rfkill save / restore, bootchart, readahead, การตั้งค่าการจัดเก็บข้อมูลเข้ารหัส การลงทะเบียนการจัดการคอนเทนเนอร์ขั้นต่ำการจัดการชื่อโฮสต์การจัดการโลแคลการจัดการเวลาการจัดการเมล็ดแบบสุ่มการจัดการตัวแปร sysctl การจัดการคอนโซล . .
เรากำลังทำอะไรอยู่:
- การจัดการเครือข่าย
- systemd-networkd
- Local DNS cache, mDNS Responder, LLMNR Responder, การตรวจสอบ DNSSEC
- IPC ในเคอร์เนล
- kdbus, sd-bus
- การประสานเวลากับ NTP
- systemd-timesyncd
- บูรณาการกับตู้คอนเทนเนอร์มากขึ้น
- Sandboxing of Services
- แอป Sandbox
- รูปแบบภาพ OS
- รูปแบบภาพคอนเทนเนอร์
- รูปแบบภาพแอป
- GPT พร้อมการค้นพบอัตโนมัติ
- ระบบไร้สัญชาติ, ระบบทันใจ, รีเซ็ตเป็นค่าจากโรงงาน
- / usr เป็นระบบปฏิบัติการ
- / etc คือการกำหนดค่า (เป็นทางเลือก)
- / var คือสถานะ (เป็นทางเลือก)
- การเริ่มต้นและการปรับปรุงโหนดปรมาณู
- บูรณาการกับระบบคลาวด์
- การจัดการบริการข้ามโหนด
- ภาพ OS ที่ตรวจสอบได้
- ไปจนถึงเฟิร์มแวร์
- กำลังโหลด Boot
ดังที่fpmurphy1ตั้งข้อสังเกตในความเห็นว่า "มันควรจะชี้ให้เห็นว่า systemd ได้ขยายขอบเขตการทำงานในช่วงหลายปีที่ผ่านมามากกว่าแค่การเริ่มต้นระบบ"
ฉันพยายามรวมข้อมูลที่เกี่ยวข้องส่วนใหญ่ไว้ที่นี่ ที่นี่ฉันกำลังเปรียบเทียบคุณสมบัติทั่วไปของ Upstart และ systemd เมื่อใช้เป็นระบบ init ตามที่ถามในคำถามและฉันพูดถึงเฉพาะคุณสมบัติของ systemd ที่อยู่นอกเหนือขอบเขตของระบบ init เพราะสิ่งเหล่านั้นไม่สามารถเปรียบเทียบกับ Startup ได้ เพื่อทำความเข้าใจความแตกต่างระหว่างทั้งสองโครงการ ควรตรวจสอบเอกสารที่เกี่ยวข้องเพื่อรับข้อมูลเพิ่มเติม
ข้อมูลเพิ่มเติมสามารถดูได้ที่:
LinOxideทีมได้สร้างSystemd VS SysV Init ลินุกซ์ Cheatsheet
service <foo> start/stop/restart/status
ยังทำงานได้ดี เช่นเดียวกับซอฟต์แวร์ unix ส่วนใหญ่ systemd ให้ความเข้ากันได้ของคำสั่งกับค่าเริ่มต้นที่รู้จักกันดี
ทั้งพุ่งพรวดและ systemd เป็นความพยายามที่จะแก้ปัญหาบางอย่างกับข้อ จำกัด ของระบบ init SysV ดั้งเดิม ตัวอย่างเช่นบริการบางอย่างต้องเริ่มต้นหลังจากบริการอื่น ๆ (ตัวอย่างเช่นคุณไม่สามารถเมานต์ระบบไฟล์ NFS จนกว่าเครือข่ายจะทำงาน) แต่วิธีเดียวใน SysV ที่จะจัดการนั่นคือการตั้งค่าลิงก์ในไดเรกทอรี rc # .d เช่นนี้อยู่ก่อนอื่น เพิ่มไปที่คุณอาจต้องหมายเลขใหม่ทุกอย่างในภายหลังเมื่อมีการเพิ่มหรือเปลี่ยนแปลงการอ้างอิง พุ่งพรวดและ Systemd มีการตั้งค่าอัจฉริยะมากขึ้นสำหรับการกำหนดความต้องการ นอกจากนี้ยังมีปัญหากับความจริงที่ว่าทุกอย่างเป็นเชลล์สคริปต์บางประเภทและไม่ใช่ทุกคนที่เขียนสคริปต์เริ่มต้นที่ดีที่สุด ที่ส่งผลต่อความเร็วของการเริ่มต้น
ข้อดีของ systemd ที่ฉันเห็น:
ข้อเสียอย่างหนึ่งที่ฉันรู้คือการใช้ประโยชน์จากการจัดสรรล่วงหน้าของซ็อกเก็ต / FH systemd daemons จำนวนมากจะต้องได้รับการแก้ไขเพื่อให้ FH ส่งผ่านไปยังพวกเขาโดย systemd
Saw systemd
กล่าวถึงArch General MLวันนี้ ดังนั้นอ่านมัน เอชออนไลน์เช่นเคยเป็นแหล่งที่ดีสำหรับเทคโนโลยี Linux และเป็นที่ที่ผมพบว่าสถานที่ของฉันที่จะเริ่มต้นการวิจัยSystemd เป็น SysV Init และทางเลือกที่พุ่งพรวด อย่างไรก็ตามบทความ H Online (ในกรณีนี้) ไม่ใช่การอ่านที่มีประโยชน์มากการใช้งานจริงของมันคือมันให้ลิงก์ไปยังการอ่านที่มีประโยชน์
คำตอบที่แท้จริงอยู่ในประกาศของ systemd ซึ่งให้บางจุดที่สำคัญของสิ่งที่ผิดกับ SysV initd และสิ่งที่ระบบใหม่ต้องทำ
เพื่อเริ่มน้อยลง
และเพื่อเริ่มต้นมากขึ้นในแบบคู่ขนาน
แผนหลักในการทำเช่นนี้ดูเหมือนว่าจะเริ่มบริการตามที่พวกเขาต้องการเท่านั้นและเพื่อเริ่มซ็อกเก็ตสำหรับบริการนั้นเพื่อให้บริการที่ต้องการสามารถเชื่อมต่อกับซ็อกเก็ตที่สร้างขึ้นก่อนที่ daemon จะออนไลน์อย่างสมบูรณ์ เห็นได้ชัดว่าซ็อกเก็ตจะเก็บข้อมูลบัฟเฟอร์จำนวนเล็กน้อยซึ่งหมายความว่าจะไม่มีข้อมูลสูญหายระหว่างการหน่วงเวลามันจะถูกจัดการทันทีที่ daemon ออนไลน์
อีกส่วนหนึ่งของแผนดูเหมือนว่าจะไม่ต่อเนื่องเป็นระบบไฟล์ แต่แทนที่จะเมานต์ตามความต้องการเช่นกันวิธีที่คุณไม่ต้องรอ/home/
ฯลฯ (เพื่อไม่ให้สับสนกับ/etc
) เพื่อเมานต์และ / หรือfsck
เมื่อคุณสามารถ เริ่ม daemons ในฐานะ/
และ/var/
อื่น ๆ ถูกเมาท์แล้ว มันบอกว่ามันจะใช้ autofs ด้วยเหตุนี้
นอกจากนี้ยังมีเป้าหมายในการสร้างตัวบอก.desktop
ลักษณะเริ่มต้นแทนสคริปต์ สิ่งนี้จะป้องกันการsh
ประมวลผลช้าจำนวนมากและแม้แต่การแยกกระบวนการจากสิ่งที่ชอบsed
และgrep
ที่มักใช้ในเชลล์สคริปต์
พวกเขาวางแผนที่จะไม่เริ่มบริการบางอย่างจนกว่าพวกเขาจะถูกถามและอาจปิดพวกเขาหากพวกเขาไม่ต้องการอีกต่อไปโมดูลบลูทู ธ และ daemon จะต้องการเฉพาะเมื่อคุณใช้อุปกรณ์บลูทู ธ อีกตัวอย่างหนึ่งที่ได้รับคือ ssh daemon นี่คือสิ่งที่ inetd สามารถทำได้ โดยส่วนตัวฉันไม่แน่ใจว่าฉันชอบสิ่งนี้เพราะมันอาจหมายถึงเวลาแฝงเมื่อฉันต้องการมันและในกรณีของ ssh ฉันคิดว่ามันหมายถึงช่องโหว่ด้านความปลอดภัยที่เป็นไปได้ถ้า inetd ของฉันถูกบุกรุกทั้งระบบจะเป็นเช่นนั้น อย่างไรก็ตามฉันได้รับแจ้งว่าการใช้สิ่งนี้เพื่อฝ่าฝืนระบบนี้เป็นไปไม่ได้และถ้าฉันต้องการฉันสามารถปิดการใช้งานคุณสมบัตินี้ต่อบริการและวิธีอื่น ๆ
เห็นได้ชัดว่าคุณสมบัติอื่นคือความสามารถในการเริ่มต้นขึ้นอยู่กับเหตุการณ์เวลาไม่ว่าจะเป็นในช่วงเวลาที่กำหนดเป็นประจำหรือในเวลาที่แน่นอน นี้จะคล้ายกับสิ่งที่crond
และatd
ทำตอนนี้ แม้ว่าฉันจะบอกว่ามันจะไม่สนับสนุนผู้ใช้ "cron" โดยส่วนตัวสิ่งนี้ฟังดูเหมือนไม่มีจุดหมายมากที่สุด ฉันคิดว่าสิ่งนี้ถูกเขียนขึ้น / คิดขึ้นโดยคนที่ไม่ได้ทำงานในสภาพแวดล้อมที่มีผู้ใช้หลายคนมันไม่มีจุดประสงค์มากสำหรับผู้ใช้ cron ถ้าคุณเป็นผู้ใช้เพียงคนเดียวในระบบ ฉันทำงานกับระบบที่มีผู้ใช้หลายคนทุกวันและกฎนั้นมักเรียกใช้สคริปต์ผู้ใช้ในฐานะผู้ใช้ แต่บางทีฉันอาจจะไม่ได้มองการณ์ไกลและมันก็ไม่ได้ทำให้มันไม่สามารถวิ่งได้crond
หรือatd
มันจะไม่ทำร้ายใครนอกจากนักพัฒนาที่ฉันคิด
ข้อเสียที่สำคัญของ systemd คือ daemons บางตัวจะต้องได้รับการแก้ไขเพื่อใช้ประโยชน์ให้เต็มที่ พวกเขาจะทำงานได้ในขณะนี้ แต่พวกเขาจะทำงานได้ดีขึ้นหากพวกเขาเขียนเฉพาะสำหรับซ็อกเก็ตรุ่น
ดูเหมือนว่าปัญหาส่วนใหญ่ของประชาชนที่ systemd พุ่งพรวดคือระบบเหตุการณ์และพวกเขาเชื่อว่ามันไม่สมเหตุสมผลหรือไม่จำเป็น บางทีคำพูดของพวกเขาอาจทำให้ดีที่สุด
หรือเพื่อให้ง่ายขึ้น: ความจริงที่ว่าผู้ใช้เพิ่งเริ่ม D-Bus นั้นไม่มีทางบ่งชี้ว่า NetworkManager ควรจะเริ่มต้นด้วย (แต่นี่คือสิ่งที่พุ่งพรวดจะทำ) มันถูกต้องแล้ว: เมื่อผู้ใช้ถาม NetworkManager นั่นเป็นข้อบ่งชี้ว่า D-Bus ควรเริ่มต้นด้วย (ซึ่งเป็นสิ่งที่ผู้ใช้ส่วนใหญ่คาดหวังใช่ไหม)
ระบบเริ่มต้นที่ดีควรเริ่มต้นเฉพาะสิ่งที่จำเป็นและตามความต้องการ ทั้งขี้เกียจหรือขนานและล่วงหน้า อย่างไรก็ตามไม่ควรเริ่มต้นเกินความจำเป็นโดยเฉพาะอย่างยิ่งไม่ใช่ทุกอย่างที่ติดตั้งซึ่งสามารถใช้บริการได้
ขณะที่ผมได้กล่าวมาแล้วนี้จะกล่าวถึงมากขึ้นครอบคลุมในประกาศของ systemd
สิ่งหนึ่งที่ดีที่สุดของคุณลืมเป็นองค์กรของกระบวนการในcgroups
ดังนั้นถ้า systemd เริ่มต้นสิ่งใดสิ่งหนึ่งมันจะใส่สิ่งนี้ลงใน cgroup ของตัวเองและไม่มีความหมาย (ไม่มีการกีดกัน) สำหรับกระบวนการที่จะหลบหนี cgroup นั้น นี่คือผลที่ตามมาของ:
สำหรับการดู systemd อย่างละเอียดเริ่มต้นด้วยร่างการออกแบบแรก (และคำวิจารณ์โดยละเอียดของระบบ init ที่มีอยู่รวมถึงการพุ่งพรวดและวิธีที่ systemd เสนอให้แก้ไข) ให้ไปที่หน้าแรก เมื่อเวลาผ่านไปมีหลายบทความในการเริ่มต้นการตีพิมพ์ในLWN เพิ่งทราบว่าการเอ่ยถึง systemd (หรือ pulseaudio) จะทำให้เกิดความไม่แน่นอน
IMVHO (และในฐานะผู้ใช้ Fedora) ฉันมีความสุขมาก บางสิ่งในสายนี้ค้างนานเกินกว่าจะจัดการกับความซับซ้อนของระบบลีนุกซ์ปัจจุบันได้ Fedora เริ่มต้นขึ้นมาระยะหนึ่งแล้ว แต่มันก็ไม่เคยออกนอกเวทีที่จะมาแทนที่ระบบ sysvinit ได้โดยรันสคริปต์ init ที่ไม่เปลี่ยนแปลง สัญญาของการลดความซับซ้อนของการกำหนดค่าการบูตนั้นมาพร้อมกับค่าใช้จ่ายอีกครั้งตั้งค่าการพึ่งพาซึ่งกันและกันได้ด้วยตนเองและนั่นก็ไม่ทำงาน systemd ตัวเลขอ้างอิงออกมาด้วยตัวเอง (หรือเพียงแค่อนุญาตให้เริ่มต้นสิ่งต่าง ๆ โดยไม่คำนึงถึงการพึ่งพาพวกเขาเรียงลำดับตัวเองออก) ข้อได้เปรียบที่ยิ่งใหญ่อีกประการ (บางคนบอกว่ามันเป็นข้อเสียอย่างรุนแรง) คือมันใช้ประโยชน์จากคุณสมบัติเฉพาะของลินุกซ์เพื่อด้ามจับ (สะดุดตา cgroups อนุญาตให้แยก daemon และลูกหลานทั้งหมดได้ดังนั้นจึงง่ายต่อการตรวจสอบ จำกัด ทรัพยากรหรือฆ่าพวกมัน กลุ่มมีอีกหลายคน)
การทำเจอร์นัล - Systemd นั้นเหมือนกับโฟลเดอร์ WinSXS เมื่อพูดถึงการบันทึกสิ่งต่าง ๆ มันจะสร้างสำเนาของสำเนาเว้นแต่คุณจะลบหรือลดขนาดไฟล์ด้วยตนเองซึ่งจะทำให้คุณไม่ต้องเดินทางไปไหน ฉันเรียกมันว่าคุกกี้ตัวโหลดบูต