Спустя два года с момента формирования прошлого значительного выпуска опубликован сервисный менеджер GNU Shepherd 0.9 (бывший dmd), который развивается разработчиками дистрибутива GNU Guix System в качестве альтернативы системе инициализации SysV-init, поддерживающей зависимости. Управляющий демон и утилиты Shepherd написаны на языке Guile (одна из реализаций языка Scheme), который также используется для определения настроек и параметров запуска сервисов. Shepherd уже применяется в дистрибутиве GuixSD GNU/Linux и нацелен также на использование в GNU/Hurd, но может работать в любой POSIX-совместимой ОС, для которой доступен язык Guile.
Shepherd выполняет работу по запуску и остановке сервисов, учитывая взаимосвязь между сервисами, динамически определяя и запуская сервисы, от которых зависит выбранный сервис. Shepherd также поддерживает определение конфликтов между сервисами и предотвращает их одновременное выполнение. Проект может использоваться как в роли основной системы инициализации (init c PID 1), так и в обособленном виде для управления фоновыми процессами отдельных пользователей (например, для запуска tor, privoxy, mcron и т.п.) с выполнением с правами данных пользователей.
Основные новшества:
- Реализована концепция временных сервисов (transient), автоматически отключаемых после завершения из-за прекращения работы процесса или вызова метода “stop”, что может потребоваться для синтезируемых сервисов, которые не могут быть перезапущены после завершения работы.
- Для создания inetd-подобных сервисов добавлена процедура “make-inetd-constructor”.
- Для создания сервисов, активируемых при сетевой активности (в стиле systemd socket activation), добавлена процедура “make-systemd-constructor”.
- Добавлена процедура для запуска сервиса в фоновом режиме – “start-in-the-background”.
- В процедуру “make-forkexec-constructor” добавлены параметры “:supplementary-groups”, “#:create-session” и “#:resource-limits”.
- Обеспечена работа без блокировки во время ожидания PID-файлов.
- Для сервисов без параметра “#:log-file” обеспечен вывод в syslog, а для сервисов с параметром #:log-file” – запись лога в отдельный файл с указанием времени записей. Логи от непривилегированного процесса shepherd сохраняются в каталоге $XDG_DATA_DIR.
- Прекращена поддержка сборки с Guile 2.0. Решены проблемы при использовании версий Guile 3.0.5-3.0.7.
- Для работы теперь требуется библиотека Fibers 1.1.0 или более новая версия.