Bug#768456: Version 3 including ansgar's and pitti's feedback
Didier Roche
didrocks at ubuntu.com
Fri Nov 7 16:16:03 GMT 2014
Here is the v3 of the patch, which includes ansgar's and pitti's
feedback. Thanks to them!
The only suggestion I couldn't integrate is Martin's system vs exec one.
I had to change keep it as system() call as we are evaluating one unit
after another as the scripts can accepts multiple units, and so exec
would prefer the evaluation and inclusion of other units passed as
parameters.
Does this make sense? The downside is that we loose the return code,
indeed (we could concatenate it if needed).
Cheers,
Didier
-------------- next part --------------
diff -Nru init-system-helpers-1.21/debian/changelog init-system-helpers-1.22/debian/changelog
--- init-system-helpers-1.21/debian/changelog 2014-08-21 07:40:58.000000000 +0200
+++ init-system-helpers-1.22/debian/changelog 2014-11-07 15:13:08.000000000 +0100
@@ -1,3 +1,16 @@
+init-system-helpers (1.22) UNRELEASED; urgency=medium
+
+ * deb-system-invoke: don't start disabled systemd services (in case
+ of systemd only services), when there is no init script.
+ Add some conditions to start the job on deb-system-invoke [restart|start],
+ during package upgrade: (Closes: #768456)
+ - deb-system-invoke start <unit> don't do anything on systemd if the
+ service is disabled.
+ - deb-system-invoke restart <unit> only restart a disabled service if
+ if the daemon was already running (forced by the admin).
+
+ -- Didier Roche <didrocks at ubuntu.com> Fri, 07 Nov 2014 15:01:27 +0100
+
init-system-helpers (1.21) unstable; urgency=medium
* Demote augeas-tools to Suggests and let the systemd2init tool error out
diff -Nru init-system-helpers-1.21/script/deb-systemd-invoke init-system-helpers-1.22/script/deb-systemd-invoke
--- init-system-helpers-1.21/script/deb-systemd-invoke 2014-08-21 07:40:58.000000000 +0200
+++ init-system-helpers-1.22/script/deb-systemd-invoke 2014-11-07 17:08:10.000000000 +0100
@@ -77,4 +77,24 @@
}
}
-exec '/bin/systemctl', @ARGV;
+# If the job is disabled and is not currently running, the job is not started or restarted.
+# However, if the job is disabled but has been forced into the running state, we *do* stop
+# and restart it since this is expected behaviour for the admin who forced the start.
+if ($action eq "start" || $action eq "restart") {
+ for my $unit (@units) {
+ system('/bin/systemctl', '--quiet', 'is-enabled', '--', $unit);
+ my $unit_enabled = $?>>8 == 0 ? 1 : 0;
+ system('/bin/systemctl', '--quiet', 'is-active', '--', $unit);
+ my $unit_active = $?>>8 == 0 ? 1 : 0;
+ if (!$unit_enabled && $action eq "start") {
+ print STDERR "$unit is disabled, not starting it.\n";
+ } elsif (!$unit_enabled && !$unit_active && $action eq "restart") {
+ print STDERR "$unit is disabled and not running, not starting it.\n";
+ }
+ else {
+ system('/bin/systemctl', "$action", "$unit");
+ }
+ }
+} else {
+ exec '/bin/systemctl', @ARGV;
+}
More information about the Pkg-systemd-maintainers
mailing list