4.5 The root Service

The service root is special, because it is used to control the Shepherd itself. It has an alias shepherd. It provides the following actions (in addition to enable, disable and restart which do not make sense here).

status

Displays which services are started and which ones are not.

detailed-status

Displays detailed information about every registered service.

load file

Evaluate in the shepherd process the Scheme code in file, in a fresh module that uses the (shepherd services) module—as with the --config option of shepherd (see Invoking shepherd).

eval exp

Likewise, evaluate Scheme expression exp in a fresh module with all the necessary bindings. Here is a couple of examples:

# herd eval root "(+ 2 2)"
4
# herd eval root "(getpid)"
1
# herd eval root "(lookup-running 'xorg-server)"
(service (version 0) (provides (xorg-server)) …)
unload service-name

Attempt to remove the service identified by service-name. shepherd will first stop the service, if necessary, and then remove it from the list of registered services. Any services depending upon service-name will be stopped as part of this process.

If service-name simply does not exist, output a warning and do nothing. If it exists, but is provided by several services, output a warning and do nothing. This latter case might occur for instance with the fictional service web-server, which might be provided by both apache and nginx. If service-name is the special string and all, attempt to remove all services except for the Shepherd itself.

reload file-name

Unload all known optional services using unload’s all option, then load file-name using load functionality. If file-name does not exist or load encounters an error, you may end up with no defined services. As these can be reloaded at a later stage this is not considered a problem. If the unload stage fails, reload will not attempt to load file-name.

daemonize

Fork and go into the background. This should be called before respawnable services are started, as otherwise we would not get the SIGCHLD signals when they terminate.