Your message dated Sat, 03 Oct 2026 18:35:51 +0000
with message-id <[email protected]>
and subject line Bug#1144866: fixed in runit 2.3.1-5
has caused the Debian Bug report #1144866,
regarding runit-run: shutdown ordering under systemd
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
1144866: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1144866
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: runit-run
Version: 2.3.1-4
Severity: wishlist
Tags: patch

Dear Maintainer,

I'm using runit under systemd via runit-run. Some of the
runit-supervised services depend on systemd-supervised ones, and it's
easy to add a file in /etc/systemd/system/runit.service.d/ specifying
e.g.
| [Unit]
| After=postgresql.service valkey-server.service
| Wants=postgresql.service valkey-server.service

This works properly for startup. However, there's a race condition on
shutdown:

The runit.service is defined with
| KillSignal=SIGHUP
| KillMode=process
which causes systemd to send SIGHUP to the runsvdir. Quoting
runsvdir(8):
| If runsvdir receives a HUP signal, it sends a TERM signal to each
| runsv(8) process it is monitoring and then exits with 111.
...and that is exactly what it does. In particular, runsvdir does NOT
wait for the runsv processes to exit first, hence the runit-supervised
services may not have terminated (or even gotten SIGTERM) yet.

But systemd (in KillMode=process) assumes that runsvdir exiting means
the service is down, and proceeds to stop the dependencies. Depending on
timing, this breaks my still-running (or still-shutting-down) services.

I wish for this race to be fixed. :)

I can see 2.5 ways to do that:
1) It should be possible to teach runsvdir to wait for its runsv
   children to exit before exiting itself. And since runsv in turn does
   wait for its children to exit, that would ensure the whole
   supervision tree has exited when runsvdir does, as systemd expects.
2) It is possible to use systemd's ExecStop= configuration to delay
   systemd from considering the service stopped until the process
   specified there has exited. Hence, specify a process that waits for
   the supervision tree to die.
2a) You could do so by interacting with
    /etc/runit/runsvdir/svmanaged/*/supervise/ to find the processes in
    question, or
2b) since systemd puts each service in its own cgroup, you can wait for
    that cgroup to become empty.

While I think 1) would be cleaner, I'm unsure about the compatibility
implications (Change SIGHUP behaviour? Use a new signal? Would Debian
want to patch runsvdir like that?) and the reason for the current
runsvdir behaviour (When/why is not waiting ever useful?).
If you think some version of this would be a good feature, please say
so, and I'll try to come up with a patch.

So meanwhile, I implemented 2b), the resulting ExecStop= script is
attached. It has been working well for me. I hope it's useful, or even
acceptable for inclusion in Debian.

Please tell me if I can do anything else to help.
Thank you for maintaining runit!
cheers,
    Jan

-- System Information:
Debian Release: forky/sid
  APT prefers testing
  APT policy: (990, 'testing'), (800, 'stable-updates'), (800, 
'stable-security-debug'), (800, 'stable-security'), (800, 'stable-debug'), 
(800, 'stable'), (650, 'testing-debug'), (550, 'unstable-debug'), (550, 
'unstable'), (10, 'experimental-debug'), (10, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 7.1.8+deb14-amd64 (SMP w/12 CPU threads; PREEMPT)
Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_OOT_MODULE, 
TAINT_UNSIGNED_MODULE
Locale: LANG=C.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages runit-run depends on:
ii  runit  2.3.1-4

runit-run recommends no packages.

runit-run suggests no packages.

-- no debconf information
#!/bin/sh
set -eu

# Tell runsvdir(8) to shutdown:
kill -HUP "${MAINPID:-}" 2>/dev/null || true


# FIXME: what do we want to do on other init systems? are they even calling 
this script?
[ -d /run/systemd/system ] || exit 0

# Systemd starts the ExecStop script (us) in the service's cgroup:
cgroup=`sed -E 's/^0:://;t;d' /proc/$$/cgroup`
[ -n "$cgroup" ] || exit 2
cgroup="/sys/fs/cgroup/$cgroup"
[ -d "$cgroup" ] || exit 3


# Now we leave the cgroup and wait for everything else in it do die.
#
# While it might seem appropriate to use "systemd-run --scope" to get our own
# cgroup, that doesn't actually work: systemd will notice that we're trying to
# start a unit during shutdown, log
#   Transaction for run-….scope/start is destructive (shutdown.target has 
'start' job queued, but 'stop' is included in transaction).
# and refuse to execute our code.
# Hence, just put us into the root cgroup by hand:
echo $$ >/sys/fs/cgroup/cgroup.procs

while grep -qFx "populated 1" "$cgroup"/cgroup.events ; do
    sleep 0.1
done

Attachment: signature.asc
Description: PGP signature


--- End Message ---
--- Begin Message ---
Source: runit
Source-Version: 2.3.1-5
Done: Lorenzo Puliti <[email protected]>

We believe that the bug you reported is fixed in the latest version of
runit, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to [email protected],
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Lorenzo Puliti <[email protected]> (supplier of updated runit package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing [email protected])


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Format: 1.8
Date: Fri, 02 Oct 2026 16:19:22 +0200
Source: runit
Architecture: source
Version: 2.3.1-5
Distribution: unstable
Urgency: medium
Maintainer: Lorenzo Puliti <[email protected]>
Changed-By: Lorenzo Puliti <[email protected]>
Closes: 923449 1105907 1143778 1144866
Changes:
 runit (2.3.1-5) unstable; urgency=medium
 .
   * default-syslog: silence socklog-check output
   * add runsv-cg for setting up cgroups on runit
   * stage 1: setup (mount) cgroup2
   * add a manpage for runsv-cg
   * runsv-cg:
      - fix typo
      - do not require runit as init
   * use /sys/fs/cgroup/runit for runit's services cgroups
   * invoke-run, finish-exec: add optional cgroup support (Closes: #923449)
   * invoke-run:
      - update manpage for cgroups
      - allow users to control verbosity for user services (Closes: #1143778)
      - clarify home directory for user services in manpage
   * runit-run: fix race at systemd shutdown.
       + thanks to Jan Braun <[email protected]> (Closes: #1144866)
   * getty-run: always test for fuser before calling it (Closes: #1105907)
   * d/control: use dh-sequence for dh_runit and dh_sysuser
   * d/control: drop {runit:Breaks} and {runit:Conflicts} for runit
   * d/control (runit-run): drop ancient Breaks and Replaces
   * bump S-V to 4.7.4, no changes required
Checksums-Sha1:
 8b86709175d2df04fa1cccd7452c10b8a6d24deb 2265 runit_2.3.1-5.dsc
 4d5550a17d5ffb8d9270bb139549e2a7125a2a41 90448 runit_2.3.1-5.debian.tar.xz
 bc4b5c13462a9f9fcd420ac476b071a85cee09c9 6934 runit_2.3.1-5_amd64.buildinfo
Checksums-Sha256:
 538a06cba27ef5f51e6e48b49d5bfaf98789a2ee635fda439d4bc53e590230f0 2265 
runit_2.3.1-5.dsc
 4a13705a96dd79d19555584242ba51420b1e871da76ae07dd25845f2a5ed1a21 90448 
runit_2.3.1-5.debian.tar.xz
 4ee723a42e71c06cbfe1953006b92280cb0ed43b8c499e376c20b0306a7a43ac 6934 
runit_2.3.1-5_amd64.buildinfo
Files:
 f33ea6456a4991f34f5d4a7dd1cc03ef 2265 admin optional runit_2.3.1-5.dsc
 4a1892bbd1e1c971bcc40c39cab9baf3 90448 admin optional 
runit_2.3.1-5.debian.tar.xz
 99e305bf0d8d87105b3ed75831c6ef6b 6934 admin optional 
runit_2.3.1-5_amd64.buildinfo

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEE2ji91PGnrxOd1bVNxxYb07RU7gMFAmrBSAYACgkQxxYb07RU
7gNgaQ//V9hWXyGgsIvtwkn6jdgFmptQJxKNtJMsGSPJLGLDWg5uUfYqtycc5FQi
JwsG4xNckWwnqQB0RiBIVDL3YlxWYf0paZYIjNLoquBtFJZt0WrpYqgmSYJM+Hnj
Tv7rle73pS8i6KzGtu0zkC02M6U/06oCYHEcqRiKlbxlnVfUpqKUb4rAzYQj+BW5
OZSZONKNPBt1EKKY3YCUYCltLvpss6CnGod8lOQZ1nqi52Tugupi+9Rk7UvM5hOy
i+zQA3GbfDyaFO5tE4vRc0dWyQsFhtKim5tXBGPmrhU8KecUuXGr4DClVbOSddqC
lrwm8LzFUdkzzd/tCpDcGUcaQIpiFbx+ojcd24oDBc9G+evgzmgW1r6fjOT57ZXu
zqRSGptKaUQrJijI9ZzerpUtT2xvK9HP/diC14RQhguvZZk5K7pe4lNKgS6rYChu
q7k7xsURuzz4/SavuX3N+zTfRiWWU8g0e/aahQHCIiUkwDIH2IFDYkjxJUM/oy2R
McYp1iOV6SMss8ePikjrqZmkowvCipGqV7PzzwYB/KrQX7doHZY6EiV4fGnUzev5
Tme5wvuz5L/VvwhZ0FsyS4NUIPT0V5oEI0MfomyzdjpvsFZlRZO+NgZtCRez6HCw
aGvo2fYYOud0F56kWLmbuXnzRQfiZld3p2z60wq+mZF7s62zDdc=
=XwEp
-----END PGP SIGNATURE-----

Attachment: pgplvQbSveef5.pgp
Description: PGP signature


--- End Message ---

Reply via email to