mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-25 05:48:07 -05:00
services: nginx: Get the Shepherd to respawn NGINX.
* gnu/services/web.scm (nginx-shepherd-service): Change 'start' (that is, all actions that don't send a signal to the master process) to return the PID. Wait until the PID file is created and contains an integer because it might be created after the parent process exits.
This commit is contained in:
parent
0b6678cd44
commit
9fc2922794
1 changed files with 15 additions and 1 deletions
|
@ -599,19 +599,33 @@ (define (nginx-shepherd-service config)
|
|||
<nginx-configuration>
|
||||
(nginx file run-directory)
|
||||
(let* ((nginx-binary (file-append nginx "/sbin/nginx"))
|
||||
(pid-file (in-vicinity run-directory "pid"))
|
||||
(nginx-action
|
||||
(lambda args
|
||||
#~(lambda _
|
||||
(invoke #$nginx-binary "-c"
|
||||
#$(or file
|
||||
(default-nginx-config config))
|
||||
#$@args)))))
|
||||
#$@args)
|
||||
(match '#$args
|
||||
(("-s" . _) #t)
|
||||
(_
|
||||
(let loop ((duration 0))
|
||||
;; https://bugs.launchpad.net/ubuntu/+source/nginx/+bug/1581864/comments/7
|
||||
(sleep duration)
|
||||
(if (file-exists? #$pid-file)
|
||||
(let ((pid (call-with-input-file #$pid-file read)))
|
||||
;; it could be #<eof>
|
||||
(if (integer? pid) pid (loop 1)))
|
||||
(loop 1)))))))))
|
||||
|
||||
;; TODO: Add 'reload' action.
|
||||
(list (shepherd-service
|
||||
(provision '(nginx))
|
||||
(documentation "Run the nginx daemon.")
|
||||
(requirement '(user-processes loopback))
|
||||
(modules `((ice-9 match)
|
||||
,@%default-modules))
|
||||
(start (nginx-action "-p" run-directory))
|
||||
(stop (nginx-action "-s" "stop")))))))
|
||||
|
||||
|
|
Loading…
Reference in a new issue