Представлен системный менеджер GNU Shepherd 1.0.0 (бывший dmd), сочетающий возможности системы инициализации и инструментария для управления системными сервисами. Отмечается, что присвоение номера 1.0 после 21 года разработки ознаменовало признание готовности проекта и его соответствия требованиям к функциональности современных систем инициализации и сервисных менеджеров.
Проект развивается разработчиками дистрибутива 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 и т.п.) с выполнением с правами данных пользователей.
Основные новшества в 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”.