From mboxrd@z Thu Jan 1 00:00:00 1970 From: ludo@gnu.org (Ludovic =?UTF-8?Q?Court=C3=A8s?=) Subject: bug#32665: Shepherd is stuck waiting for /var/run/nginx/pid Date: Sat, 08 Sep 2018 18:53:13 +0200 Message-ID: <87zhwsdj7q.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:54402) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fygaa-000881-PE for bug-guix@gnu.org; Sat, 08 Sep 2018 13:00:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fygaZ-00018D-9Q for bug-guix@gnu.org; Sat, 08 Sep 2018 13:00:04 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:45532) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fygaY-00016t-Ve for bug-guix@gnu.org; Sat, 08 Sep 2018 13:00:03 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1fygaY-0007tT-RB for bug-guix@gnu.org; Sat, 08 Sep 2018 13:00:02 -0400 Sender: "Debbugs-submit" Resent-Message-ID: Received: from eggs.gnu.org ([2001:4830:134:3::10]:52483) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fygZb-0007Vv-Ve for bug-guix@gnu.org; Sat, 08 Sep 2018 12:59:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fygUD-0003Il-Vc for bug-guix@gnu.org; Sat, 08 Sep 2018 12:53:30 -0400 List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guix-bounces+gcggb-bug-guix=m.gmane.org@gnu.org Sender: "bug-Guix" To: 32665@debbugs.gnu.org Cc: clement@lassieur.org --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello Cl=C3=A9ment, Commit 9fc2922794ffaae48e0a7c536e530ea2e0d46cf3 adds a loop to the nginx service that checks for /var/run/nginx/pid. Unfortunately, on berlin that loop never ends because the file is not created (on berlin we use a =E2=80=9Chand-written=E2=80=9D nginx config file that lacks a =E2=80=9Cpid= =E2=80=9D directive; see guix-maintenance.git.) I think there are two things to address: 1. Don=E2=80=99t look for a PID file when passed a hand-written config fi= le; 2. Make sure the loop always terminates, similar to what =E2=80=98make-forkexec-constructor=E2=80=99 does. The patch below fixes that. The second patch fixes the =E2=80=98stop=E2=80= =99 procedure. Thoughts? Ludo=E2=80=99. --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-services-nginx-Don-t-read-PID-file-when-passed-a-cus.patch >From c9daf228a69c24cff6ba5508a3b67ebe3c702a2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Sat, 8 Sep 2018 18:48:48 +0200 Subject: [PATCH 1/2] services: nginx: Don't read PID file when passed a custom config file. Fixes . * gnu/services/web.scm (nginx-shepherd-service): Check whether FILE is true and don't read the PID file if it is; use 'read-pid-file' instead of a potentially endless loop. --- gnu/services/web.scm | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/gnu/services/web.scm b/gnu/services/web.scm index 3778efd04..1c993b29f 100644 --- a/gnu/services/web.scm +++ b/gnu/services/web.scm @@ -610,14 +610,12 @@ of index files." (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 # - (if (integer? pid) pid (loop 1))) - (loop 1))))))))) + ;; When FILE is true, we cannot be sure that PID-FILE will + ;; be created, so assume it won't show up. When FILE is + ;; false, read PID-FILE. + #$(if file + #~#t + #~(read-pid-file #$pid-file)))))))) ;; TODO: Add 'reload' action. (list (shepherd-service -- 2.18.0 --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0002-services-nginx-stop-returns-f.patch >From 211a820dbd37926f07f9245ab42cbaf6fb0264bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Sat, 8 Sep 2018 18:50:55 +0200 Subject: [PATCH 2/2] services: nginx: 'stop' returns #f. Previously we'd return #t, which the Shepherd would consider a failure to stop the service. * gnu/services/web.scm (nginx-shepherd-service): In 'nginx-action', return #f when stopping the service. --- gnu/services/web.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnu/services/web.scm b/gnu/services/web.scm index 1c993b29f..df82a6de6 100644 --- a/gnu/services/web.scm +++ b/gnu/services/web.scm @@ -608,7 +608,7 @@ of index files." (default-nginx-config config)) #$@args) (match '#$args - (("-s" . _) #t) + (("-s" . _) #f) (_ ;; When FILE is true, we cannot be sure that PID-FILE will ;; be created, so assume it won't show up. When FILE is -- 2.18.0 --=-=-=--