[PATCH] gnu: services: Add respawn-limit and respawn-delay.

  • Done
  • quality assurance status badge
Details
2 participants
  • Attila Lendvai
  • Ludovic Courtès
Owner
unassigned
Submitted by
Attila Lendvai
Severity
normal
A
A
Attila Lendvai wrote on 15 Jan 11:43 +0100
(address . guix-patches@gnu.org)(name . Attila Lendvai)(address . attila@lendvai.name)
288643093baa2855c7b5f8cf1d9f6da2b378f965.1705315426.git.attila@lendvai.name
* gnu/services/shepherd.scm (<shepherd-service>): Add respawn-limit and
respawn-delay.

Change-Id: I54408e8fb4bcc0956d9610771bf5c566fdc2914c
---
gnu/services/shepherd.scm | 14 ++++++++++++++
1 file changed, 14 insertions(+)

Toggle diff (44 lines)
diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm
index 5ebac129cec..f5bcde721fe 100644
--- a/gnu/services/shepherd.scm
+++ b/gnu/services/shepherd.scm
@@ -55,6 +55,8 @@ (define-module (gnu services shepherd)
shepherd-service-canonical-name
shepherd-service-requirement
shepherd-service-one-shot?
+ shepherd-service-respawn-limit
+ shepherd-service-respawn-delay
shepherd-service-respawn?
shepherd-service-start
shepherd-service-stop
@@ -211,6 +213,10 @@ (define-record-type* <shepherd-service>
(default #f))
(respawn? shepherd-service-respawn? ;Boolean
(default #t))
+ (respawn-limit shepherd-service-respawn-limit
+ (default #f))
+ (respawn-delay shepherd-service-respawn-delay
+ (default #f))
(start shepherd-service-start) ;g-expression (procedure)
(stop shepherd-service-stop ;g-expression (procedure)
(default #~(const #f)))
@@ -309,6 +315,14 @@ (define (shepherd-service-file service)
#:one-shot? '#$(shepherd-service-one-shot? service)
#:respawn? '#$(shepherd-service-respawn? service)
+ #$@(if (shepherd-service-respawn-limit service)
+ `(#:respawn-limit
+ ,(shepherd-service-respawn-limit service))
+ '())
+ #$@(if (shepherd-service-respawn-delay service)
+ `(#:respawn-delay
+ ,(shepherd-service-respawn-delay service))
+ '())
#:start #$(shepherd-service-start service)
#:stop #$(shepherd-service-stop service)
#:actions

base-commit: 162d6a2fdd6af13272967c77347a54934ecb45e6
prerequisite-patch-id: 2adcd37ab1f0752ec27a4edabbabe1c65d88f122
--
2.41.0
L
L
Ludovic Courtès wrote on 24 Jan 23:15 +0100
(name . Attila Lendvai)(address . attila.lendvai@gmail.com)
87le8es7ic.fsf@gnu.org
Hi,

Attila Lendvai <attila.lendvai@gmail.com> skribis:

Toggle quote (5 lines)
> * gnu/services/shepherd.scm (<shepherd-service>): Add respawn-limit and
> respawn-delay.
>
> Change-Id: I54408e8fb4bcc0956d9610771bf5c566fdc2914c

Neat! Please also mention the changes in ‘shepherd-service-file’.

Toggle quote (5 lines)
> + (respawn-limit shepherd-service-respawn-limit
> + (default #f))
> + (respawn-delay shepherd-service-respawn-delay
> + (default #f))

Could you document them in ‘doc/guix.texi’?

Toggle quote (9 lines)
> + #$@(if (shepherd-service-respawn-limit service)
> + `(#:respawn-limit
> + ,(shepherd-service-respawn-limit service))
> + '())
> + #$@(if (shepherd-service-respawn-delay service)
> + `(#:respawn-delay
> + ,(shepherd-service-respawn-delay service))
> + '())

In theory, we could end up loading code that uses #:respawn-limit in a
running shepherd that does not support it (too old). To properly
address that, we’d need to check what shepherd version we’re talking to.

But… I think we can ignore this issue, as long as we don’t use it in
gnu/services/*.scm until some time has passed.

Thanks!

Ludo’.
A
A
attila.lendvai wrote on 25 Jan 16:05 +0100
[PATCH v2] gnu: services: Add respawn-limit and respawn-delay.
(address . 68468@debbugs.gnu.org)(name . Attila Lendvai)(address . attila@lendvai.name)
90823c237e0086ba1a0c64dffdf2cef00bbecc71.1706195140.git.attila@lendvai.name
From: Attila Lendvai <attila@lendvai.name>

* gnu/services/shepherd.scm (<shepherd-service>): Add respawn-limit and
respawn-delay.
(shepherd-service-file): Emit the two values into the shepherd service
constructor form.

Change-Id: I54408e8fb4bcc0956d9610771bf5c566fdc2914c
---
doc/guix.texi | 8 ++++++++
gnu/services/shepherd.scm | 14 ++++++++++++++
2 files changed, 22 insertions(+)

Toggle diff (63 lines)
diff --git a/doc/guix.texi b/doc/guix.texi
index a66005ee9db..9f911643352 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -42888,6 +42888,14 @@ Shepherd Services
Whether to restart the service when it stops, for instance when the
underlying process dies.
+@item @code{respawn-limit} (default: @code{#f})
+Set a limit on how many times and how frequently a service may be
+restarted by Shepherd before it is disabled. See @pxref{Defining
+Services,,, shepherd, The GNU Shepherd Manual} for details.
+
+@item @code{respawn-delay} (default: @code{#f})
+Wait @code{respawn-delay} seconds before restarting a failed service.
+
@item @code{start}
@itemx @code{stop} (default: @code{#~(const #f)})
The @code{start} and @code{stop} fields refer to the Shepherd's
diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm
index 5ebac129cec..f5bcde721fe 100644
--- a/gnu/services/shepherd.scm
+++ b/gnu/services/shepherd.scm
@@ -55,6 +55,8 @@ (define-module (gnu services shepherd)
shepherd-service-canonical-name
shepherd-service-requirement
shepherd-service-one-shot?
+ shepherd-service-respawn-limit
+ shepherd-service-respawn-delay
shepherd-service-respawn?
shepherd-service-start
shepherd-service-stop
@@ -211,6 +213,10 @@ (define-record-type* <shepherd-service>
(default #f))
(respawn? shepherd-service-respawn? ;Boolean
(default #t))
+ (respawn-limit shepherd-service-respawn-limit
+ (default #f))
+ (respawn-delay shepherd-service-respawn-delay
+ (default #f))
(start shepherd-service-start) ;g-expression (procedure)
(stop shepherd-service-stop ;g-expression (procedure)
(default #~(const #f)))
@@ -309,6 +315,14 @@ (define (shepherd-service-file service)
#:one-shot? '#$(shepherd-service-one-shot? service)
#:respawn? '#$(shepherd-service-respawn? service)
+ #$@(if (shepherd-service-respawn-limit service)
+ `(#:respawn-limit
+ ,(shepherd-service-respawn-limit service))
+ '())
+ #$@(if (shepherd-service-respawn-delay service)
+ `(#:respawn-delay
+ ,(shepherd-service-respawn-delay service))
+ '())
#:start #$(shepherd-service-start service)
#:stop #$(shepherd-service-stop service)
#:actions

base-commit: 162d6a2fdd6af13272967c77347a54934ecb45e6
prerequisite-patch-id: 2adcd37ab1f0752ec27a4edabbabe1c65d88f122
--
2.41.0
L
L
Ludovic Courtès wrote on 28 Jan 22:28 +0100
(address . attila.lendvai@gmail.com)
87wmrtdu62.fsf@gnu.org
Hi,

attila.lendvai@gmail.com skribis:

Toggle quote (9 lines)
> From: Attila Lendvai <attila@lendvai.name>
>
> * gnu/services/shepherd.scm (<shepherd-service>): Add respawn-limit and
> respawn-delay.
> (shepherd-service-file): Emit the two values into the shepherd service
> constructor form.
>
> Change-Id: I54408e8fb4bcc0956d9610771bf5c566fdc2914c

Applied with the tweaks below, thanks!

Ludo’.
Toggle diff (20 lines)
diff --git a/doc/guix.texi b/doc/guix.texi
index 6b95ff89e0..9c703da9bc 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -43145,11 +43145,12 @@ Shepherd Services
@item @code{respawn-limit} (default: @code{#f})
Set a limit on how many times and how frequently a service may be
-restarted by Shepherd before it is disabled. See @pxref{Defining
-Services,,, shepherd, The GNU Shepherd Manual} for details.
+restarted by Shepherd before it is disabled. @xref{Defining
+Services,,, shepherd, The GNU Shepherd Manual}, for details.
@item @code{respawn-delay} (default: @code{#f})
-Wait @code{respawn-delay} seconds before restarting a failed service.
+When true, this is the delay in seconds before restarting a failed
+service.
@item @code{start}
@itemx @code{stop} (default: @code{#~(const #f)})
Closed
?