switch-to-configuration: Restart services that were manually started
This commit is contained in:
parent
56ce5614f9
commit
b6bd0a4f84
@ -6,6 +6,8 @@ use File::Basename;
|
|||||||
use File::Slurp;
|
use File::Slurp;
|
||||||
use Cwd 'abs_path';
|
use Cwd 'abs_path';
|
||||||
|
|
||||||
|
my $restartListFile = "/run/systemd/restart-list";
|
||||||
|
|
||||||
my $action = shift @ARGV;
|
my $action = shift @ARGV;
|
||||||
|
|
||||||
if (!defined $action || ($action ne "switch" && $action ne "boot" && $action ne "test")) {
|
if (!defined $action || ($action ne "switch" && $action ne "boot" && $action ne "test")) {
|
||||||
@ -75,6 +77,10 @@ foreach my $unitFile (glob "/etc/systemd/system/*") {
|
|||||||
system("@systemd@/bin/systemctl", "stop", $unit); # FIXME: ignore errors?
|
system("@systemd@/bin/systemctl", "stop", $unit); # FIXME: ignore errors?
|
||||||
} elsif (abs_path($unitFile) ne abs_path($newUnitFile)) {
|
} elsif (abs_path($unitFile) ne abs_path($newUnitFile)) {
|
||||||
print STDERR "stopping changed unit ‘$unit’...\n";
|
print STDERR "stopping changed unit ‘$unit’...\n";
|
||||||
|
# Record that this unit needs to be started below. We
|
||||||
|
# write this to a file to ensure that the service gets
|
||||||
|
# restarted if we're interrupted.
|
||||||
|
write_file($restartListFile, { append => 1 }, "$unit\n");
|
||||||
system("@systemd@/bin/systemctl", "stop", $unit); # FIXME: ignore errors?
|
system("@systemd@/bin/systemctl", "stop", $unit); # FIXME: ignore errors?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -92,10 +98,21 @@ system("@out@/activate", "@out@") == 0 or $res = 2;
|
|||||||
system("@systemd@/bin/systemctl", "daemon-reload") == 0 or $res = 3;
|
system("@systemd@/bin/systemctl", "daemon-reload") == 0 or $res = 3;
|
||||||
|
|
||||||
# Start all units required by the default target. This should start
|
# Start all units required by the default target. This should start
|
||||||
# all changed units we stopped above as well as any new dependencies.
|
# most changed units we stopped above as well as any new dependencies.
|
||||||
print STDERR "starting default target...\n";
|
print STDERR "starting default target...\n";
|
||||||
system("@systemd@/bin/systemctl", "start", "default.target") == 0 or $res = 4;
|
system("@systemd@/bin/systemctl", "start", "default.target") == 0 or $res = 4;
|
||||||
|
|
||||||
|
# Start changed units we stopped above. This is necessary because
|
||||||
|
# some may not be dependencies of the default target (i.e., they were
|
||||||
|
# manually started).
|
||||||
|
my @stopped = split '\n', read_file($restartListFile, err_mode => 'quiet') // "";
|
||||||
|
if (scalar @stopped > 0) {
|
||||||
|
print STDERR "restarting unit(s) ", join(" ", @stopped), "...\n";
|
||||||
|
my %unique = map { $_, 1 } @stopped;
|
||||||
|
system("@systemd@/bin/systemctl", "start", keys(%unique)) == 0 or $res = 4;
|
||||||
|
unlink($restartListFile);
|
||||||
|
}
|
||||||
|
|
||||||
# Signal dbus to reload its configuration.
|
# Signal dbus to reload its configuration.
|
||||||
system("@systemd@/bin/systemctl", "reload", "dbus.service");
|
system("@systemd@/bin/systemctl", "reload", "dbus.service");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user