summaryrefslogtreecommitdiff
path: root/gnu/services
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2026-03-28 15:22:05 +0100
committerLudovic Courtès <ludo@gnu.org>2026-04-07 13:26:20 +0200
commitc7cb771cf40d779cbce062c029ee51fbd7de181b (patch)
tree079cb277598371c43052d8075abc2c90095e0293 /gnu/services
parent4ac798a2844b55ba1dca2d7986ea3f31a3a7e497 (diff)
services: nginx: Fix ‘stop’ in cases where a custom config file is passed.
Previously, when the ‘file’ field of ‘nginx-configuration’ was true, the PID file would be unknown; thus, the ‘start’ method would return #t and the ‘stop’ method would eventually fail with a type error because it would receive #t instead of a process. This fixes it by changing ‘stop’ to invoke “nginx -s stop” when the service’s value is not a process. * gnu/services/web.scm (nginx-shepherd-service): In ‘stop’, change to invoke “nginx -s stop” when ‘value’ is not a process. Fixes: guix/guix#7061 Reported-by: Dan Littlewood Change-Id: I20ff065ecd2c64e5fc98f59c25d91b300bc7b4cd Signed-off-by: Ludovic Courtès <ludo@gnu.org> Merges: #7543
Diffstat (limited to 'gnu/services')
-rw-r--r--gnu/services/web.scm16
1 files changed, 10 insertions, 6 deletions
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 2056e0cca15..948d8064c6a 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015 David Thompson <davet@gnu.org>
-;;; Copyright © 2015-2023, 2025 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015-2023, 2025-2026 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 Nikita <nikita@n0.is>
;;; Copyright © 2016, 2017, 2018 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2017, 2018, 2019 Christopher Baines <mail@cbaines.net>
@@ -987,11 +987,15 @@ of index files."
(modules `((ice-9 match)
,@%default-modules))
(start (nginx-action "-p" run-directory))
-
- ;; Instead of invoking "nginx -s stop", use
- ;; 'make-kill-destructor', which waits for the main process to
- ;; actually terminate.
- (stop #~(make-kill-destructor))
+ (stop #~(lambda (value)
+ ;; When the PID is known, use 'terminate-process', which
+ ;; waits for the main process to actually terminate.
+ ;; When FILE is true, there's potentially no PID file
+ ;; and thus the PID is not known; in that case, invoke
+ ;; "nginx -s stop".
+ (if (process? value)
+ (terminate-process (process-id value) SIGTERM)
+ (#$(nginx-action "stop")))))
(actions
(list