[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#29992: [PATCH] services: postgresql: Use pg_ctl to start and stop po
From: |
Clément Lassieur |
Subject: |
bug#29992: [PATCH] services: postgresql: Use pg_ctl to start and stop postgres. |
Date: |
Wed, 24 Jan 2018 03:20:37 +0100 |
Fixes <https://bugs.gnu.org/29992>.
* gnu/services/databases.scm (postgresql-shepherd-service): Replace
make-forkexec-constructor and make-kill-destructor with pg_ctl.
---
gnu/services/databases.scm | 39 +++++++++++++++++++++++----------------
1 file changed, 23 insertions(+), 16 deletions(-)
diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index 6a01cb1ce..42f2315d5 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -147,26 +147,33 @@ host all all ::1/128 trust"))
(define postgresql-shepherd-service
(match-lambda
(($ <postgresql-configuration> postgresql port locale config-file
data-directory)
- (let ((start-script
- ;; Wrapper script that switches to the 'postgres' user before
- ;; launching daemon.
- (program-file "start-postgres"
- #~(let ((user (getpwnam "postgres"))
- (postgres (string-append #$postgresql
- "/bin/postgres")))
- (setgid (passwd:gid user))
- (setuid (passwd:uid user))
- (system* postgres
- (string-append "--config-file="
- #$config-file)
- "-p" (number->string #$port)
- "-D" #$data-directory)))))
+ (let* ((pg_ctl-wrapper
+ ;; Wrapper script that switches to the 'postgres' user before
+ ;; launching daemon.
+ (program-file
+ "pg_ctl-wrapper"
+ #~(begin
+ (use-modules (ice-9 match)
+ (ice-9 format))
+ (match (command-line)
+ ((_ mode)
+ (let ((user (getpwnam "postgres"))
+ (pg_ctl #$(file-append postgresql "/bin/pg_ctl")))
+ (setgid (passwd:gid user))
+ (setuid (passwd:uid user))
+ (system
+ (format #f "~a -D ~a -o '--config-file=~a -p ~d' ~a"
+ pg_ctl #$data-directory #$config-file #$port
+ mode))))))))
+ (action (lambda args
+ #~(lambda _
+ (invoke #$pg_ctl-wrapper address@hidden)))))
(list (shepherd-service
(provision '(postgres))
(documentation "Run the PostgreSQL daemon.")
(requirement '(user-processes loopback syslogd))
- (start #~(make-forkexec-constructor #$start-script))
- (stop #~(make-kill-destructor))))))))
+ (start (action "start"))
+ (stop (action "stop"))))))))
(define postgresql-service-type
(service-type (name 'postgresql)
--
2.16.0