The GNU Shepherd service manager 0.9.2 (formerly dmd) has been released, developed by the GNU Guix System distribution team as an alternative to the SysV-init initialization system, supporting dependencies. The Shepherd daemon and utilities are written in Guile (one of the implementations of the Scheme language), which is also used to define settings and startup parameters for services. Shepherd is already used in the GuixSD GNU/Linux distribution and is also aimed at use with GNU/Hurd, but can run on any POSIX-compliant OS that has Guile available.
Shepherd handles the starting and stopping of services, taking into account the interdependencies between them, dynamically identifying and launching services on which the selected service depends. Shepherd also supports conflict resolution between services and prevents them from running simultaneously. The project can serve both as the primary initialization system (init with PID 1) and in a standalone manner for managing background processes of individual users (e.g., for running tor, privoxy, mcron, etc.) with execution under the authority of those users.
Among the changes:
- The file descriptors used in Shepherd are now marked with the O_CLOEXEC (close-on-exec) flag, rather than being closed immediately upon executing 'exec-command', allowing descriptors to be passed to services that are launched not directly, but using 'exec-command'.
- Client connections are now handled in non-blocking mode, preventing Shepherd from hanging while sending an incomplete command.
- A directory for log files specified in the 'log-file' setting is now created if it does not already exist.
Source: opennet.ru
