Dwa lata po powstaniu ostatniego znaczącego wydania opublikowano menedżera usług GNU Shepherd 0.9 (dawniej dmd), który jest rozwijany przez twórców dystrybucji GNU Guix System jako alternatywa dla systemu inicjalizacji SysV-init obsługującego zależności . Demon kontroli Shepherd i narzędzia są napisane w języku Guile (jedna z implementacji języka Scheme), który służy również do definiowania ustawień i parametrów uruchamiania usług. Shepherd jest już używany w dystrybucji GuixSD GNU/Linux i ma być również używany w GNU/Hurd, ale może działać na dowolnym systemie operacyjnym zgodnym z POSIX, dla którego dostępny jest język Guile.
Shepherd wykonuje pracę polegającą na uruchamianiu i zatrzymywaniu usług, biorąc pod uwagę relacje między usługami, dynamicznie identyfikując i uruchamiając usługi, od których zależy wybrana usługa. Shepherd obsługuje także wykrywanie konfliktów pomiędzy usługami i zapobieganie ich jednoczesnemu działaniu. Projekt może służyć zarówno jako główny system inicjujący (init z PID 1), jak i w osobnej formie do zarządzania procesami w tle poszczególnych użytkowników (na przykład do uruchamiania tora, privoxy, mcron itp.) z wykonaniem z uprawnieniami tych użytkowników.
Główne innowacje:
- Wdrożono koncepcję usług tymczasowych (przejściowych), automatycznie wyłączanych po zakończeniu w wyniku zakończenia procesu lub wywołania metody „stop”, która może być wymagana w przypadku usług syntetycznych, których nie można ponownie uruchomić po wyłączeniu.
- Aby utworzyć usługi typu inetd, dodano procedurę „make-inetd-constructor”.
- Aby utworzyć usługi aktywowane podczas aktywności sieciowej (w stylu aktywacji gniazda systemowego), dodano procedurę „make-systemd-constructor”.
- Dodano procedurę uruchamiania usługi w tle - „uruchamianie w tle”.
- Dodano parametry ":suplementary-groups", "#:create-session" i "#:resource-limits" do procedury "make-forkexec-constructor".
- Włączono pracę bez blokowania podczas oczekiwania na pliki PID.
- Dla usług bez parametru „#:log-file” wyprowadzany jest do syslog, natomiast dla usług z parametrem #:log-file log jest zapisywany w osobnym pliku wskazującym czas nagrań. Logi z nieuprzywilejowanego procesu pasterskiego przechowywane są w katalogu $XDG_DATA_DIR.
- Wsparcie dla budowania z Guile 2.0 zostało przerwane. Problemy podczas korzystania z wersji Guile 3.0.5-3.0.7 zostały rozwiązane.
- Do działania wymagana jest teraz biblioteka Fibers w wersji 1.1.0 lub nowszej.
Źródło: opennet.ru