[PATCH] Shepherd: Terminate all services upon SIGTERM or SIGHUP

DoneSubmitted by Carlo Zancanaro.
Details
3 participants
  • Carlo Zancanaro
  • Leo Famulari
  • Ludovic Courtès
Owner
unassigned
Severity
normal
C
C
Carlo Zancanaro wrote on 19 Feb 2018 18:11
(address . guix-patches@gnu.org)
87sh9wnbu6.fsf@zancanaro.id.au
Hey,
I use Shepherd to manage my user session, and if I log out then Shepherd leaves all my services running. This patch handles SIGTERM and SIGHUP to prevent that.
I hope the guix-patches mailing list was the right place to send it. From what I understand Shepherd development is done through the guix lists, so it seemed to make the most sense to me.
It's also worth noting that I had to run `gettextize` to get Shepherd to build on current master, but I haven't included those changes in this commit (because I don't know what should be committed and what shouldn't).
Carlo
From aabb9c6b1b52189d20339531de0b8b96bcace69f Mon Sep 17 00:00:00 2001From: Carlo Zancanaro <carlo@zancanaro.id.au>Date: Tue, 20 Feb 2018 02:52:47 +1100Subject: [PATCH] Terminate all services upon SIGTERM or SIGHUP
* modules/shepherd.scm (main): Add SIGTERM and SIGHUP handlers which stop root-service.* tests/sigterm.sh, tests/sighup.sh: New files.* Makefile.am (TESTS): Add tests/sigterm.sh and tests/sighup.sh.--- Makefile.am | 5 ++++- modules/shepherd.scm | 11 ++++++++++ tests/sighup.sh | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/sigterm.sh | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 tests/sighup.sh create mode 100644 tests/sigterm.sh
Toggle diff (182 lines)diff --git a/Makefile.am b/Makefile.amindex a30b11d..021857d 100644--- a/Makefile.am+++ b/Makefile.am@@ -1,6 +1,7 @@ # Makefile.am -- How to build and install the Shepherd. # Copyright © 2002, 2003 Wolfgang Jährling <wolfgang@pro-linux.de> # Copyright © 2013, 2014, 2015, 2016, 2018 Ludovic Courtès <ludo@gnu.org>+# Copyright © 2018 Carlo Zancanaro <carlo@zancanaro.id.au> # # This file is part of the GNU Shepherd. #@@ -188,7 +189,9 @@ TESTS = \ tests/no-home.sh \ tests/pid-file.sh \ tests/status-sexp.sh \- tests/sigint.sh+ tests/sigint.sh \+ tests/sigterm.sh \+ tests/sighup.sh TEST_EXTENSIONS = .sh EXTRA_DIST += $(TESTS)diff --git a/modules/shepherd.scm b/modules/shepherd.scmindex 5334657..650ba63 100644--- a/modules/shepherd.scm+++ b/modules/shepherd.scm@@ -1,6 +1,7 @@ ;; shepherd.scm -- The daemon shepherd. ;; Copyright (C) 2013, 2014, 2016, 2018 Ludovic Courtès <ludo@gnu.org> ;; Copyright (C) 2002, 2003 Wolfgang Jährling <wolfgang@pro-linux.de>+;; Copyright (C) 2018 Carlo Zancanaro <carlo@zancanaro.id.au> ;; ;; This file is part of the GNU Shepherd. ;;@@ -182,6 +183,16 @@ (lambda _ (stop root-service))) + ;; Stop everything when we get SIGTERM.+ (sigaction SIGTERM+ (lambda _+ (stop root-service)))++ ;; Stop everything when we get SIGHUP.+ (sigaction SIGHUP+ (lambda _+ (stop root-service)))+ ;; Ignore SIGPIPE so that we don't die if a client closes the connection ;; prematurely. (sigaction SIGPIPE SIG_IGN)diff --git a/tests/sighup.sh b/tests/sighup.shnew file mode 100644index 0000000..e9ca84b--- /dev/null+++ b/tests/sighup.sh@@ -0,0 +1,58 @@+# GNU Shepherd --- Make sure SIGHUP is correctly handled.+# Copyright © 2014, 2016 Ludovic Courtès <ludo@gnu.org>+# Copyright © 2018 Carlo Zancanaro <carlo@zancanaro.id.au>+#+# This file is part of the GNU Shepherd.+#+# The GNU Shepherd is free software; you can redistribute it and/or modify it+# under the terms of the GNU General Public License as published by+# the Free Software Foundation; either version 3 of the License, or (at+# your option) any later version.+#+# The GNU Shepherd is distributed in the hope that it will be useful, but+# WITHOUT ANY WARRANTY; without even the implied warranty of+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+# GNU General Public License for more details.+#+# You should have received a copy of the GNU General Public License+# along with the GNU Shepherd. If not, see <http://www.gnu.org/licenses/>.++shepherd --version+herd --version++socket="t-socket-$$"+conf="t-conf-$$"+log="t-log-$$"+stamp="t-stamp-$$"+pid="t-pid-$$"++herd="herd -s $socket"++trap "rm -f $socket $conf $stamp $log;+ test -f $pid && kill \`cat $pid\` || true; rm -f $pid" EXIT++cat > "$conf"<<EOF+(use-modules (srfi srfi-26))+(register-services+ (make <service>+ #:provides '(test)+ #:start (const #t)+ #:stop (lambda _+ (call-with-output-file "$stamp"+ (lambda (port)+ (display "stopped" port))))+ #:respawn? #f))+ (start 'test)+EOF++rm -f "$pid" "$stamp"+shepherd -I -s "$socket" -c "$conf" --pid="$pid" --log="$log" &++while [ ! -f "$pid" ] ; do sleep 0.5 ; done++# Send SIGTERM to shepherd.+kill -HUP "`cat "$pid"`"+while kill -0 "`cat "$pid"`" ; do sleep 0.5 ; done++# Make sure the service's 'stop' method was called.+test -f "$stamp"diff --git a/tests/sigterm.sh b/tests/sigterm.shnew file mode 100644index 0000000..f6b66be--- /dev/null+++ b/tests/sigterm.sh@@ -0,0 +1,58 @@+# GNU Shepherd --- Make sure SIGTERM is correctly handled.+# Copyright © 2014, 2016 Ludovic Courtès <ludo@gnu.org>+# Copyright © 2018 Carlo Zancanaro <carlo@zancanaro.id.au>+#+# This file is part of the GNU Shepherd.+#+# The GNU Shepherd is free software; you can redistribute it and/or modify it+# under the terms of the GNU General Public License as published by+# the Free Software Foundation; either version 3 of the License, or (at+# your option) any later version.+#+# The GNU Shepherd is distributed in the hope that it will be useful, but+# WITHOUT ANY WARRANTY; without even the implied warranty of+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+# GNU General Public License for more details.+#+# You should have received a copy of the GNU General Public License+# along with the GNU Shepherd. If not, see <http://www.gnu.org/licenses/>.++shepherd --version+herd --version++socket="t-socket-$$"+conf="t-conf-$$"+log="t-log-$$"+stamp="t-stamp-$$"+pid="t-pid-$$"++herd="herd -s $socket"++trap "rm -f $socket $conf $stamp $log;+ test -f $pid && kill \`cat $pid\` || true; rm -f $pid" EXIT++cat > "$conf"<<EOF+(use-modules (srfi srfi-26))+(register-services+ (make <service>+ #:provides '(test)+ #:start (const #t)+ #:stop (lambda _+ (call-with-output-file "$stamp"+ (lambda (port)+ (display "stopped" port))))+ #:respawn? #f))+ (start 'test)+EOF++rm -f "$pid" "$stamp"+shepherd -I -s "$socket" -c "$conf" --pid="$pid" --log="$log" &++while [ ! -f "$pid" ] ; do sleep 0.5 ; done++# Send SIGTERM to shepherd.+kill -TERM "`cat "$pid"`"+while kill -0 "`cat "$pid"`" ; do sleep 0.5 ; done++# Make sure the service's 'stop' method was called.+test -f "$stamp"-- 2.16.1
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEE1lpncq7JnOkt+LaeqdyPv9awIbwFAlqLBVEACgkQqdyPv9awIbxxpA/+O5zb2L/rpSnrGK7IMNAYeo2cOoA/TjKDu574BUfxqlpIkuSjRwvPFmVE1pQNtpeZx0uWAEbFYtjtI8xsQlilQasK4L6AUYGpEQzGZetLPQzTyQaqH6rlzASHyr9Fjv6/qpbyTGGkhTfGMz+witLCefjg+L30m0jViIXxjBERIFW6OjEjgofY35OLwJBpB8NXcVbDem/h9dpdMzVTse5WSvmDHNQGTYwforYO45llmiLb8uItll6Ma8E6oAG+GYDJPbDyXRMSMWLuQ1TPlQ42/s/SV6ZKjzax6xQ3eUIrUi53hZFex4VqlXqjEAdu8sNPb6BBVlew4XGrYFcmtwvj3s7y1nCTN2IuNFXb87PKjoOdnJfDdlyQR4+nEVul+qowBFqA5+AyVcCh/BFUDcrVvVTZrZUJBEBQjSgglNlQC8Wun39ulhIeNKb5q8qfFedmT5H5emlij6ruSaFSU009Q3FSCDH4fg5eezjcncXDXIoZ/XLR5gtdEewas9zHnqamTAIAvtVtcEmqjtg7iru3Qovknf0+VXrAoqE1Bn9Uv01HEaQv0uvGks4P2aW1InSSu7qd1N60+udQdWcxlYzTpqJsn0dIPW0dENR2z3JnH5bIMXF8j270NGpeZvy0ndXu0W3I/jRW+TAh0u3oDwOB+vbnsEylh9uEwC8dp3VUY9I==LnSF-----END PGP SIGNATURE-----
L
L
Ludovic Courtès wrote on 27 Feb 2018 10:45
(name . Carlo Zancanaro)(address . carlo@zancanaro.id.au)(address . 30532@debbugs.gnu.org)
87lgfe4vft.fsf@gnu.org
Hi Carlo,
Carlo Zancanaro <carlo@zancanaro.id.au> skribis:
Toggle quote (4 lines)> I use Shepherd to manage my user session, and if I log out then> Shepherd leaves all my services running. This patch handles SIGTERM> and SIGHUP to prevent that.
Good catch!
Toggle quote (4 lines)> I hope the guix-patches mailing list was the right place to send> it. From what I understand Shepherd development is done through the> guix lists, so it seemed to make the most sense to me.
Yes, that’s perfect.
Toggle quote (5 lines)> It's also worth noting that I had to run `gettextize` to get Shepherd> to build on current master, but I haven't included those changes in> this commit (because I don't know what should be committed and what> shouldn't).
Right, I’m not sure what’s wrong with that. I’ve committed the samefiles under po/ as I did for Guix:
Toggle snippet (5 lines)$ git ls-files po/po/Makevarspo/POTFILES.in
Toggle quote (10 lines)> From aabb9c6b1b52189d20339531de0b8b96bcace69f Mon Sep 17 00:00:00 2001> From: Carlo Zancanaro <carlo@zancanaro.id.au>> Date: Tue, 20 Feb 2018 02:52:47 +1100> Subject: [PATCH] Terminate all services upon SIGTERM or SIGHUP>> * modules/shepherd.scm (main): Add SIGTERM and SIGHUP handlers which stop> root-service.> * tests/sigterm.sh, tests/sighup.sh: New files.> * Makefile.am (TESTS): Add tests/sigterm.sh and tests/sighup.sh.
Excellent!
I have one request: since the three tests differ only in the signalname, could you make it a single test file and have a loop like:
for signal in SIGTERM SIGHUP SIGINT
TIA,Ludo’.
L
L
Leo Famulari wrote on 27 Feb 2018 18:22
(name . Ludovic Courtès)(address . ludo@gnu.org)
20180227172243.GA19017@jasmine.lan
On Tue, Feb 27, 2018 at 10:45:58AM +0100, Ludovic Courtès wrote:
Toggle quote (8 lines)> Carlo Zancanaro <carlo@zancanaro.id.au> skribis:> > > I use Shepherd to manage my user session, and if I log out then> > Shepherd leaves all my services running. This patch handles SIGTERM> > and SIGHUP to prevent that.> > Good catch!
"This update broke my workflow" https://xkcd.com/1172/
Joking aside, I think this change is correct, but it would be great tobe able to have long-running unprivileged processes, as on systemd.There, the administrator can use `loginctl enable-linger $USER`. We'dwant to do it in the system configuration. From loginctl(1):
------Enable/disable user lingering for one or more users. If enabled for aspecific user, a user manager is spawned for the user at boot and keptaround after logouts. This allows users who are not logged in to runlong-running services. Takes one or more user names or numeric UIDs asargument. If no argument is specified, enables/disables lingering forthe user of the session of the caller.------
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEsFFZSPHn08G5gDigJkb6MLrKfwgFAlqVk94ACgkQJkb6MLrKfwgPzg/8Dnnizd1nnhw/v5ok6A70JMYE2zCfuKesIkYGO6q3D66Tf+jzY1fEmSBFsxFiDxBL6RX6Nr8Knq2O8y6sRh0heGuHqGCTJi+QsqbWMSGZn4kromLdaCq578co+yv5E5c2AuudrWJilu1dKZRzSP0nnZGZjjCIK6BCGcLowl0c41vx3mXT4txIHIrgIOwI29aWFnHl2+mZ3Mwnylyoc1/CbHbteEoHt0/gMdxi2XrX3z10yhgX3sfODPMGf2zEQpkFFqcDxaVBaYXLbNTxexY2tSGm9AWj35qzgsz/baDvcCPuL9iHWUzPRz+7ZdTTCR1JRXW563iFrgLbqOv3d+cwBk5QrDT6u26hj2ui7V/hni5qVNyGG/TmDqfM8ySKmWxecXkrhMzGo72/6edBxprdEUSf5y/mh+anp051kenwn5PbXQQEzugyJvMpubTf27LsuYV/wgkkdbQTliXcIjwklKAEBBokh+S8x9nxxaJKIdrC4cfWWPMLR/NzHHj20qqNcCv58dWsjb070MbFsSzPHSTCgUp9/fIh2zfZ5M3UreZ0/9pn6A/lyQp/aQS4YyvqCfy/C9efir9EV3B3Wiu/aLZq/e/jhW4nycZsWb0LjUEuSeUVHEmerS41/j5OJcx/PECVIIiXBXZDJpsCjk5SFwQVfvfPMsl5HXdxjN0yms8==76Wm-----END PGP SIGNATURE-----

L
L
Ludovic Courtès wrote on 27 Feb 2018 22:03
(name . Leo Famulari)(address . leo@famulari.name)
877eqyxhz9.fsf@gnu.org
Leo Famulari <leo@famulari.name> skribis:
Toggle quote (25 lines)> On Tue, Feb 27, 2018 at 10:45:58AM +0100, Ludovic Courtès wrote:>> Carlo Zancanaro <carlo@zancanaro.id.au> skribis:>> >> > I use Shepherd to manage my user session, and if I log out then>> > Shepherd leaves all my services running. This patch handles SIGTERM>> > and SIGHUP to prevent that.>> >> Good catch!>> "This update broke my workflow" <https://xkcd.com/1172/>>> Joking aside, I think this change is correct, but it would be great to> be able to have long-running unprivileged processes, as on systemd.> There, the administrator can use `loginctl enable-linger $USER`. We'd> want to do it in the system configuration. From loginctl(1):>> ------> Enable/disable user lingering for one or more users. If enabled for a> specific user, a user manager is spawned for the user at boot and kept> around after logouts. This allows users who are not logged in to run> long-running services. Takes one or more user names or numeric UIDs as> argument. If no argument is specified, enables/disables lingering for> the user of the session of the caller.> ------
Indeed, that sounds useful.
I suppose on GuixSD PID 1 could start subprocesses (with an initiallyempty config file?) for selected users at boot time. Would that makesense?
Ludo’.
C
C
Carlo Zancanaro wrote on 27 Feb 2018 22:19
(name . Leo Famulari)(address . leo@famulari.name)
87bmga9lm4.fsf@zancanaro.id.au
On Tue, Feb 27 2018, Leo Famulari wrote:
Toggle quote (2 lines)> "This update broke my workflow" https://xkcd.com/1172/
How seriously should I take this? I understand that it's a joke, but are you currently relying on this behaviour of shepherd? I could add an action to the root service to tell shepherd to leave processes behind when it is killed, if we wanted to expose that behaviour.
Carlo
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEE1lpncq7JnOkt+LaeqdyPv9awIbwFAlqVy1MACgkQqdyPv9awIbyb1Q//UuxKXFmgDb3d3rCQBxJkZ+8gzAK7/YkxVcAeZV3s/t+n56rKqvo7qTktoQFJ24qe0eekVZ8/c0925bb0dnl04GiETVGo8kLyXzEh8Pn5iCPrNmpDYXVSgPtA5oVhBXs8IZLxksRwej2lOye9jARZJeSrnbnm94IMkl4H2s0yLxBsrI5AiYc8Mt5g+p1epIQMhgH5/LSdCY6kCFcJObazjTiZti+nrfap63C0gFOVykE+gRMMajhKgppYOCTVke7PaF6FI1aYTrScb53hxlpgL1Xn3VPDlnPknz8HCEmUzl2D8r9XS2C72MfpWay9iNRO4TER7O+V6VAkbkmsPoypSk/kk4PMjGGDntNdH/wKNDydRYx5qkomaV0BaFrnqk6fceQAq8TXd3pllguhg6j/odBCcDUXVo/gb/5spKsXF25A0g81Z3a/y61imZgG/u67W1nruc/9ijnaEm0OOBo2HqxXAcDLSRbwJyA/sPoqTI6KHoZFKyHdoaDOVtNecTkKxCZHRCt+ffWa09tiyk2lCA49CMo9Mmom4nJ8hj5dTQkSxMewnSbecO1pqg01Y/OMuID7rT8r+RD1rFM6KMTVd7TrXVXGJXo7nLwk4zyl4sPOHgh76QsBsi+D+M6ghyd/H0CHx6vG1VKSEzVA/fRnqZ4jR430ZYUWP7s3L2nlk0s==ZRdp-----END PGP SIGNATURE-----
C
C
Carlo Zancanaro wrote on 27 Feb 2018 22:29
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 30532@debbugs.gnu.org)
87a7vu9l4h.fsf@zancanaro.id.au
Hey Ludo,
On Tue, Feb 27 2018, Ludovic Courtès wrote:
Toggle quote (20 lines)>> It's also worth noting that I had to run `gettextize` to get >> Shepherd>> to build on current master, but I haven't included those >> changes in>> this commit (because I don't know what should be committed and >> what>> shouldn't).>> Right, I’m not sure what’s wrong with that. I’ve committed the > same> files under po/ as I did for Guix:>> --8<---------------cut > here---------------start------------->8---> $ git ls-files po/> po/Makevars> po/POTFILES.in> --8<---------------cut > here---------------end--------------->8---
If you clone shepherd from the repository, can you build it? Comparing the guix repository to the shepherd one I can't easily work out what needs to be done for this, but hopefully you can at least reproduce my problem.
Toggle quote (6 lines)> I have one request: since the three tests differ only in the > signal> name, could you make it a single test file and have a loop like:>> for signal in SIGTERM SIGHUP SIGINT
Updated patch is attached.
Carlo
From 717456edd92ba753daf5dd40e2f8d51eab3e7a73 Mon Sep 17 00:00:00 2001From: Carlo Zancanaro <carlo@zancanaro.id.au>Date: Tue, 20 Feb 2018 02:52:47 +1100Subject: [PATCH] Terminate all services upon SIGTERM or SIGHUP
* modules/shepherd.scm (main): Add SIGTERM and SIGHUP handlers which stop root-service.* tests/sigint.sh: Rename to...* tests/signals.sh: ... this, and add tests for SIGTERM and SIGUP.--- Makefile.am | 3 ++- modules/shepherd.scm | 11 +++++++++++ tests/{sigint.sh => signals.sh} | 23 ++++++++++++++--------- 3 files changed, 27 insertions(+), 10 deletions(-) rename tests/{sigint.sh => signals.sh} (72%)
Toggle diff (94 lines)diff --git a/Makefile.am b/Makefile.amindex a30b11d..1c394e1 100644--- a/Makefile.am+++ b/Makefile.am@@ -1,6 +1,7 @@ # Makefile.am -- How to build and install the Shepherd. # Copyright © 2002, 2003 Wolfgang Jährling <wolfgang@pro-linux.de> # Copyright © 2013, 2014, 2015, 2016, 2018 Ludovic Courtès <ludo@gnu.org>+# Copyright © 2018 Carlo Zancanaro <carlo@zancanaro.id.au> # # This file is part of the GNU Shepherd. #@@ -188,7 +189,7 @@ TESTS = \ tests/no-home.sh \ tests/pid-file.sh \ tests/status-sexp.sh \- tests/sigint.sh+ tests/signals.sh TEST_EXTENSIONS = .sh EXTRA_DIST += $(TESTS)diff --git a/modules/shepherd.scm b/modules/shepherd.scmindex 5334657..650ba63 100644--- a/modules/shepherd.scm+++ b/modules/shepherd.scm@@ -1,6 +1,7 @@ ;; shepherd.scm -- The daemon shepherd. ;; Copyright (C) 2013, 2014, 2016, 2018 Ludovic Courtès <ludo@gnu.org> ;; Copyright (C) 2002, 2003 Wolfgang Jährling <wolfgang@pro-linux.de>+;; Copyright (C) 2018 Carlo Zancanaro <carlo@zancanaro.id.au> ;; ;; This file is part of the GNU Shepherd. ;;@@ -182,6 +183,16 @@ (lambda _ (stop root-service))) + ;; Stop everything when we get SIGTERM.+ (sigaction SIGTERM+ (lambda _+ (stop root-service)))++ ;; Stop everything when we get SIGHUP.+ (sigaction SIGHUP+ (lambda _+ (stop root-service)))+ ;; Ignore SIGPIPE so that we don't die if a client closes the connection ;; prematurely. (sigaction SIGPIPE SIG_IGN)diff --git a/tests/sigint.sh b/tests/signals.shsimilarity index 72%rename from tests/sigint.shrename to tests/signals.shindex 7354848..acb254a 100644--- a/tests/sigint.sh+++ b/tests/signals.sh@@ -1,5 +1,6 @@-# GNU Shepherd --- Make sure SIGINT is correctly handled.+# GNU Shepherd --- Make sure SIGINT, SIGTERM, and SIGHUP are correctly handled. # Copyright © 2014, 2016 Ludovic Courtès <ludo@gnu.org>+# Copyright © 2018 Carlo Zancanaro <carlo@zancanaro.id.au> # # This file is part of the GNU Shepherd. #@@ -44,14 +45,18 @@ cat > "$conf"<<EOF (start 'test) EOF -rm -f "$pid" "$stamp"-shepherd -I -s "$socket" -c "$conf" --pid="$pid" --log="$log" &+for signal in INT TERM HUP; do -while [ ! -f "$pid" ] ; do sleep 0.5 ; done+ rm -f "$pid" "$stamp" "$socket"+ shepherd -I -s "$socket" -c "$conf" --pid="$pid" --log="$log" & -# Send SIGINT to shepherd.-kill -INT "`cat "$pid"`"-while kill -0 "`cat "$pid"`" ; do sleep 0.5 ; done+ while [ ! -f "$pid" ] ; do sleep 0.5 ; done -# Make sure the service's 'stop' method was called.-test -f "$stamp"+ # Send signal to shepherd.+ kill -$signal "`cat "$pid"`"+ while kill -0 "`cat "$pid"`" ; do sleep 0.5 ; done++ # Make sure the service's 'stop' method was called.+ test -f "$stamp"++done-- 2.16.1
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEE1lpncq7JnOkt+LaeqdyPv9awIbwFAlqVzc4ACgkQqdyPv9awIbzBLBAAiLvfHSep1yMOn9LmfMuOWCiCG/mcd07czWtYiNMSuZJ/20KHGacdlBSpsDMkLDDdM+DPEIT7pGh/LSpdtXlITFzTYChsIxEu7MAkY72rsstzzOWzyZcVIEKol1u8OOGlXKU13rTFESdZLL2RM7ndBpGgVSdZ18R3ngoB0fSXOhUuLQc8PnjK1snc4AwyL4bXfxLz4TkMZhGVoPOcAIIJN4V0mX4+HiEDYjUg29f6aIQ4/bMdeqnc9dp+KxW4J01u9E3SkEQQCNt4gAj9AyBXABoAVLOOF6eKKAxbIO1vFKvePumf6S0VXyKyPoSZgVp00CvwFef9zlecLM9EznD7LkfA6erlPUbL+riYoIy20NA3NaaCuuVnlk7kNaRd5ijYxDWmXKpjfBX86i8YvGqZABaL28bwiW3IAUXNwunM9Jj1DuwxuUsl5LP/J/HbPCQPnK0SkI7XDXBLkarThZMXMEx0S65IC3F0G00Qfr12H+F0pdkMrd500F1o5ZRNlm6tEcg6CIz0SYHfQ1eqc22djkNC1ZmLvf+dI7CBptUk/oW6Plz6piAU/i5UfEsjs32ri0CJZQMhGHeyC/AfhmPC549pvIzYMtR168Ez/nEw0Tfcdc3Y7u0odeaWqw8BoI8cXkYy9PlSJPj3RD9TuUG9jg3B2zJlhy3qVoFi8GWrADc==NyjP-----END PGP SIGNATURE-----
L
L
Ludovic Courtès wrote on 27 Feb 2018 22:30
(name . Carlo Zancanaro)(address . carlo@zancanaro.id.au)
87efl6w26t.fsf@gnu.org
Carlo Zancanaro <carlo@zancanaro.id.au> skribis:
Toggle quote (8 lines)> On Tue, Feb 27 2018, Leo Famulari wrote:>> "This update broke my workflow" <https://xkcd.com/1172/>>> How seriously should I take this? I understand that it's a joke, but> are you currently relying on this behaviour of shepherd? I could add> an action to the root service to tell shepherd to leave processes> behind when it is killed, if we wanted to expose that behaviour.
Maybe with an option: --signal-handling-style=leo's?
:-)
Ludo’.
L
L
Ludovic Courtès wrote on 1 Mar 2018 10:55
(name . Carlo Zancanaro)(address . carlo@zancanaro.id.au)(address . 30532@debbugs.gnu.org)
878tbc86hm.fsf@gnu.org
Carlo Zancanaro <carlo@zancanaro.id.au> skribis:
Toggle quote (10 lines)> From 717456edd92ba753daf5dd40e2f8d51eab3e7a73 Mon Sep 17 00:00:00 2001> From: Carlo Zancanaro <carlo@zancanaro.id.au>> Date: Tue, 20 Feb 2018 02:52:47 +1100> Subject: [PATCH] Terminate all services upon SIGTERM or SIGHUP>> * modules/shepherd.scm (main): Add SIGTERM and SIGHUP handlers which stop> root-service.> * tests/sigint.sh: Rename to...> * tests/signals.sh: ... this, and add tests for SIGTERM and SIGUP.
Perfect. Applied, thanks!
Ludo’.
L
L
Leo Famulari wrote on 2 Mar 2018 01:30
(name . Carlo Zancanaro)(address . carlo@zancanaro.id.au)
20180302003009.GA8305@jasmine.lan
On Wed, Feb 28, 2018 at 08:19:15AM +1100, Carlo Zancanaro wrote:
Toggle quote (8 lines)> On Tue, Feb 27 2018, Leo Famulari wrote:> > "This update broke my workflow" <https://xkcd.com/1172/>> > How seriously should I take this? I understand that it's a joke, but are you> currently relying on this behaviour of shepherd? I could add an action to> the root service to tell shepherd to leave processes behind when it is> killed, if we wanted to expose that behaviour.
I am using it, but it's not critical. I can stay logged in with tmux orsomething after this change. I'd rather we address this use case asdescribed previously, with something like 'enable-linger'.
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEsFFZSPHn08G5gDigJkb6MLrKfwgFAlqYmw0ACgkQJkb6MLrKfwh9FxAAyDFhfmmNJmruBXG94bUN7IKW3BGX1JaoDnsZmEbNuI3XasGdZZi3XK5xGcq/+gvhrtxEEwIjtMva4igz85ubsdP7VtW04TOeOGwsQL0YgkB5RpCG1EH3sKcG1cE+sZDYG5E6pa+3RlBz2uVjnjewwmA/AwVLi5nm64lM9Spo4oBK/2ZGpyu2QcHtuxvRakxinF88/Lbx1Pun8nZp/kEeFqzTTbQkY++6MPTRV4GoBN8IBRg4eqWmO2a+7ulxePiL8cR5sAzJMm+NGqZfKHI3gH9/gqEN/e5BLoC+asZHDdJlmx7jGKQhIwX8lAUZJtfI3xah4k99J0e085s3xDC5+xQTbTBGmoGHOqE/Ly85equiJIZu8SoX4Q86+JCRPuK7p8PKDmnImQbYUh6zn81n+1ywp3rpTvXKyzlw7DXiJV13UzSZH62X147xukEynuex2omq93jRhdS+b7IUCL+vSKE/AlJ33wrBNgFaks3E6W5soPs+gTKSNQdmeLfHR0/+qz+/UFym/tCvoyojDu29mtDq4yIN3jBHBcVtCY5KSCdKJsfxnIoCm/hev69S3ab2gB8aUdXqa9NQ0J9uASUnujDBbVi+gYUiPr3TkYd6VGzxq3EPbkJL9mbWIYwqISV4ImeSOCMchVW1cuipbuwycHuYSk/bnbRDYmrFmljLhGo==3y7h-----END PGP SIGNATURE-----

C
C
Carlo Zancanaro wrote on 2 Mar 2018 08:25
(name . Leo Famulari)(address . leo@famulari.name)
874llzgcrd.fsf@zancanaro.id.au
Hey Leo,
On Fri, Mar 02 2018, Leo Famulari wrote:
Toggle quote (3 lines)> I'd rather we address this use case as described previously, > with something like 'enable-linger'.
I've not used the enable-linger functionality of systemd, but after doing some reading, maybe it could work like this?
At boot-time we could start an instance of shepherd for each permitted user (maybe with a `lingering-user-service-type` which adds a shepherd service?). It loads ~/.config/shepherd/init.scm, and starts any services which are enabled. It also adds a pseudo-service "login", which allows a user to specify a dependency on there being a current user session (so shepherd can be told to start processes on login, and to terminate them on logout).
For users who don't have a `lingering-user-service-type` running, pid 1 will listen until they log-in and will start a shepherd instance for them on login, loading ~/.config/shepherd/init.scm. When they logout pid 1 will terminate their user shepherd instance (along with any services it started).
This will require a few more changes to shepherd before it can work, but does that sound like the sort of behaviour you want? Could you open a new bug about it?
Carlo
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEE1lpncq7JnOkt+LaeqdyPv9awIbwFAlqY/GYACgkQqdyPv9awIbxNEA//fczfJKjPS/09pSfwOrURaywa2WZQ0B3mM8jHmE7140f45/fupBAc65yeYqncqtPHxsiR4JVUSDB8NrFYGHEkIkQkhNQC0wOJqr4XMJc6KbgEMSvj5FC7NwkHARCi/vGt9CR4IctKuGAJaxJD3BemPDVfWgxQUmyUHi9qzNLjl+b56Sk+yFKR2e+xTH/GS3A5IOTjKJpo4B8LCxllMHB5BYZ9rPA0/dbMCQQwEggNnt4+ln91jBR21yB8Ugfax39lYh6cg7cQT16rmp74EhFJD5ArhN4MMOgbL48QoibMrwpR+bLHvczN773Aox2P31g4TdofH/bn1aslCKokiGERFGnSvtCwbfK96Zp6ttjxOIyDzBrwrFV2ugsVx0gxB15FBDNxaxsq9srjLwfScgfC1YJrBY/5W5+I8yZqztH1ymUndVrKWwm8c1LQ/qC5bG6U/AnWxdsBwY43a1dzaSt7xTt6GzJbeM2EyICRahNAXZC00b5flYBlRNuk1A19T2fszDcfdbxQXcFQN/0iiiyKS4yIY/HWB9JGNzCcq+9LOMf1Nbz0ERoFQx1uAk/XUOQk2i5eWCQQ+/1ydQ4ehSPuMddTMI159GE5ICdqxzsZNSqqjbcb4gm+FFXYwdJaFU/mu+PRZdfru/8jGKe0QAeqfKoZ5AIYj1qlOteR9hX2NtI==eioX-----END PGP SIGNATURE-----
L
L
Ludovic Courtès wrote on 2 Mar 2018 13:57
control message for bug #30532
(address . control@debbugs.gnu.org)
87fu5ihbye.fsf@gnu.org
tags 30532 fixedclose 30532
?
Your comment

This issue is archived.

To comment on this conversation send email to 30532@debbugs.gnu.org