services: shepherd: Support “free-form” services.
* gnu/services/shepherd.scm (<shepherd-service>)[free-form]: New field. [start]: Add default value. (shepherd-service-file): Rename to… (shepherd-service-file/regular): … this. (shepherd-service-file/free-form): New procedure. (shepherd-service-file): Dispatch to one of the two procedures above. * doc/guix.texi (Shepherd Services): Document the ‘free-form’ field. Reviewed-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Change-Id: I206374e950ef6d1e4a996c0f507fb5fcd9cadde3master
parent
0fdac5f036
commit
0a220c1599
|
@ -44088,7 +44088,7 @@ Services,,, shepherd, The GNU Shepherd Manual}, for details.
|
|||
When true, this is the delay in seconds before restarting a failed
|
||||
service.
|
||||
|
||||
@item @code{start}
|
||||
@item @code{start} (default: @code{#~(const #t)})
|
||||
@itemx @code{stop} (default: @code{#~(const #f)})
|
||||
The @code{start} and @code{stop} fields refer to the Shepherd's
|
||||
facilities to start and stop processes (@pxref{Service De- and
|
||||
|
@ -44107,6 +44107,30 @@ This is a list of @code{shepherd-action} objects (see below) defining
|
|||
herd @var{action} @var{service} [@var{arguments}@dots{}]
|
||||
@end example
|
||||
|
||||
@item @code{free-form} (default: @code{#f})
|
||||
When set, this field replaces the @code{start}, @code{stop}, and
|
||||
@code{actions} fields. It is meant to be used when the service
|
||||
definition comes from some other source, typically the service
|
||||
collection provided by the Shepherd proper (@pxref{Service Collection,,,
|
||||
shepherd, The GNU Shepherd Manual}).
|
||||
|
||||
@cindex REPL service, for shepherd
|
||||
For example, the snippet below defines a service for the Shepherd's
|
||||
built-in @acronym{REPL, read-eval-print loop} service (@pxref{REPL
|
||||
Service,,, shepherd, The GNU Shepherd Manual}):
|
||||
|
||||
@lisp
|
||||
(shepherd-service
|
||||
(provision '(repl))
|
||||
(modules '((shepherd service repl)))
|
||||
(free-form #~(repl-service)))
|
||||
@end lisp
|
||||
|
||||
In this case, the service object is returned by the @code{repl-service}
|
||||
procedure of the Shepherd, so all the @code{free-form} G-expression does
|
||||
is call that procedure. Note that the @code{provision} field must be
|
||||
consistent with the actual service provision.
|
||||
|
||||
@item @code{auto-start?} (default: @code{#t})
|
||||
Whether this service should be started automatically by the Shepherd. If it
|
||||
is @code{#f} the service has to be started manually with @code{herd start}.
|
||||
|
|
|
@ -60,6 +60,7 @@
|
|||
shepherd-service-respawn?
|
||||
shepherd-service-start
|
||||
shepherd-service-stop
|
||||
shepherd-service-free-form
|
||||
shepherd-service-auto-start?
|
||||
shepherd-service-modules
|
||||
|
||||
|
@ -217,7 +218,10 @@ DEFAULT is given, use it as the service's default value."
|
|||
(default #f))
|
||||
(respawn-delay shepherd-service-respawn-delay
|
||||
(default #f))
|
||||
(start shepherd-service-start) ;g-expression (procedure)
|
||||
(free-form shepherd-service-free-form ;#f | g-expression (service)
|
||||
(default #f))
|
||||
(start shepherd-service-start ;g-expression (procedure)
|
||||
(default #~(const #t)))
|
||||
(stop shepherd-service-stop ;g-expression (procedure)
|
||||
(default #~(const #f)))
|
||||
(actions shepherd-service-actions ;list of <shepherd-action>
|
||||
|
@ -298,8 +302,8 @@ stored."
|
|||
provisions)
|
||||
".scm")))
|
||||
|
||||
(define (shepherd-service-file service)
|
||||
"Return a file defining SERVICE."
|
||||
(define (shepherd-service-file/regular service)
|
||||
"Return a file defining SERVICE, a service whose 'free-form' field is #f."
|
||||
(scheme-file (shepherd-service-file-name service)
|
||||
(with-imported-modules %default-imported-modules
|
||||
#~(begin
|
||||
|
@ -332,6 +336,21 @@ stored."
|
|||
#~(#$name #$doc #$proc)))
|
||||
(shepherd-service-actions service))))))))
|
||||
|
||||
(define (shepherd-service-file/free-form service)
|
||||
"Return a file defining SERVICE, a service whose 'free-form' field is set."
|
||||
(scheme-file (shepherd-service-file-name service)
|
||||
(with-imported-modules %default-imported-modules
|
||||
#~(begin
|
||||
(use-modules #$@(shepherd-service-modules service))
|
||||
|
||||
#$(shepherd-service-free-form service)))))
|
||||
|
||||
(define (shepherd-service-file service)
|
||||
"Return a file defining SERVICE."
|
||||
(if (shepherd-service-free-form service)
|
||||
(shepherd-service-file/free-form service)
|
||||
(shepherd-service-file/regular service)))
|
||||
|
||||
(define (scm->go file shepherd)
|
||||
"Compile FILE, which contains code to be loaded by shepherd's config file,
|
||||
and return the resulting '.go' file. SHEPHERD is used as shepherd package."
|
||||
|
|
Reference in New Issue