Спустя два года с момента формирования прошлого значительного выпуска опубликован сервисный менеджер GNU Shepherd 0.9 (бывший dmd), который развивается разработчиками дистрибутива GNU Guix System в качестве альтернативы системе инициализации SysV-init, поддерживающей зависимости. Управляющий демон и утилиты Shepherd написаны на языке Guile (одна из реализаций языка Scheme), который также используется для определения настроек и параметров запуска сервисов. Shepherd уже применяется в дистрибутиве GuixSD GNU/Linux และยังออกแบบมาเพื่อใช้งานบน GNU/Hurd แต่สามารถทำงานได้บนระบบปฏิบัติการใดๆ ที่เป็นไปตามมาตรฐาน POSIX และมีภาษา Guile ให้ใช้งาน
Shepherd ทำงานในการเริ่มและหยุดบริการโดยคำนึงถึงความสัมพันธ์ระหว่างบริการ ระบุและเริ่มบริการแบบไดนามิกที่บริการที่เลือกขึ้นอยู่กับ Shepherd ยังสนับสนุนการตรวจจับข้อขัดแย้งระหว่างบริการและป้องกันไม่ให้ทำงานพร้อมกัน โปรเจ็กต์สามารถใช้เป็นทั้งระบบการเริ่มต้นหลัก (เริ่มต้นด้วย PID 1) และในรูปแบบแยกต่างหากเพื่อจัดการกระบวนการเบื้องหลังของผู้ใช้แต่ละราย (เช่น เพื่อรัน tor, privoxy, mcron ฯลฯ) ด้วยการดำเนินการที่มีสิทธิ์ ของผู้ใช้เหล่านี้
นวัตกรรมหลัก:
- มีการนำแนวคิดของบริการชั่วคราว (ชั่วคราว) มาใช้ ซึ่งจะถูกปิดใช้งานโดยอัตโนมัติหลังจากเสร็จสิ้นเนื่องจากกระบวนการสิ้นสุดลงหรือการเรียกใช้เมธอด "หยุด" ซึ่งอาจจำเป็นสำหรับบริการสังเคราะห์ที่ไม่สามารถรีสตาร์ทได้หลังจากเสร็จสิ้น
- มีการเพิ่มขั้นตอน "make-inetd-constructor" เพื่อสร้างบริการที่คล้ายกับ inetd
- มีการเพิ่มขั้นตอน "make-systemd-constructor" เพื่อสร้างบริการที่เปิดใช้งานโดยกิจกรรมเครือข่าย (ในรูปแบบของการเปิดใช้งานซ็อกเก็ต systemd)
- เพิ่มขั้นตอนการเริ่มบริการในพื้นหลัง - "start-in-the-background"
- พารามิเตอร์ ":supplementary-groups" "#:create-session" และ "#:resource-limits" ได้ถูกเพิ่มเข้าไปในกระบวนการ "make-forkexec-constructor" แล้ว
- รับประกันการทำงานโดยไม่บล็อคในขณะที่รอไฟล์ PID
- บริการที่ไม่มีพารามิเตอร์ "#:log-file" จะถูกบันทึกลงใน syslog ในขณะที่บริการที่มีพารามิเตอร์ "#:log-file" จะถูกบันทึกลงในไฟล์แยกต่างหากพร้อมประทับเวลา บันทึกจากกระบวนการ Shepherd ที่ไม่มีสิทธิ์จะถูกบันทึกไว้ในไดเร็กทอรี $XDG_DATA_DIR
- การสนับสนุนการสร้างด้วย Guile 2.0 ได้ถูกยกเลิกแล้ว ปัญหาเกี่ยวกับ Guile 3.0.5-3.0.7 ได้รับการแก้ไขแล้ว
- คุณสมบัตินี้ต้องใช้ไลบรารี Fibers เวอร์ชัน 1.1.0 ขึ้นไป
ที่มา: opennet.ru
