9 декабря 2024 года состоялся релиз системного менеджера GNU Shepherd 1.0.0 (ранее dmd), сочетающего возможности системы инициализации и инструментария для управления системными сервисами. Это событие произошло после 21 года разработки проекта и после признания командой готовности проекта и его соответствия требованиям к функциональности современных систем инициализации и сервисных менеджеров.
Проект GNU Shepherd развивается разработчиками дистрибутива GNU Guix System в качестве альтернативы системе инициализации SysV-init, поддерживающей зависимости. Управляющий демон и утилиты Shepherd написаны на языке Guile (одна из реализаций языка Scheme), который также используется для определения настроек и параметров запуска сервисов. Решение Shepherd уже применяется в дистрибутиве GNU Guix System и нацелено также на использование в GNU/Hurd, но может работать в любой POSIX-совместимой ОС, для которой доступен язык Guile.
Проект Shepherd выполняет работу по запуску и остановке сервисов, учитывая взаимосвязь между ними, динамически определяя и запуская сервисы, от которых зависит выбранный. Решение Shepherd также поддерживает определение конфликтов между сервисами и предотвращает их одновременное выполнение. Проект может использоваться как в роли основной системы инициализации (init c PID 1), так и в обособленном виде для управления фоновыми процессами отдельных пользователей (например, для запуска tor, privoxy, mcron и т.п.) с выполнением с правами данных пользователей.
По информации OpenNET, основные изменения и дополнения в GNU Shepherd 1.0.0:
добавлена поддержка сервисов, периодически запускающих команды или код на языке Scheme по указанному расписанию;
в команде "herd status SERVICE" реализован показ высокоуровневой информации о сервисах, такой как PID, команда и адреса, на которых принимаются сетевые запросы, а также сводки недавно добавленных в лог сообщений. Кроме того, данная команда теперь показывает применимые к сервису пользовательские действия и информирует о наличии заменяющего сервиса, который будет применён после перезапуска текущего сервиса;
команда herd status root теперь не является синонимом herd status и отображает сведения о корневом процессе shepherd;
для платформы Linux предоставлена возможность перезапуска с использованием механизма kexec ("reboot --kexec") для замены ядра Linux без физической перезагрузки;
добавлен сервис log-rotation, отвечающий за периодическую ротацию логов и удаление устаревших логов;
добавлен сервис system-log, который можно использовать в качестве замены традиционной системы syslogd;
добавлен сервис timer для запуска команд в указанное время, по аналогии с утилитой "at". Например, "herd schedule timer at 07:00 -- mpg123 alarm.mp3";
добавлен сервис transient для запуска команд в фоне, по аналогии с утилитой systemd-run. Например, "herd spawn transient -d $PWD -- make -j4".
В проекте Shepherd разработчики планируют сделать ряд простых улучшений, например добавить поддержку динамически реконфигурируемых служб (возможность перезапуска службы, но с другими параметрами), интеграцию с контрольными группами («cgroups») в Linux, правильную интеграцию для приостановки программного обеспечения.
В долгосрочной перспективе команда проекта предвидит захватывающее путешествие к распределённому и функционально-ориентированному Shepherd. Например, с использованием фреймворка Spritely Goblins для этого. По замыслу разработчиков, этот шаг выглядит как естественное продолжение работы над дизайном Shepherd.