]> git.proxmox.com Git - pve-container.git/blobdiff - src/lxc-pve-poststop-hook
destroy_config: die if unlink fails
[pve-container.git] / src / lxc-pve-poststop-hook
index b8524cc85740e217ebf4d1337b4afe115c6defad..654aa268780c977a9e37b83c9b299162fa1d91a9 100755 (executable)
@@ -74,23 +74,20 @@ __PACKAGE__->register_method ({
 
        my $target = $ENV{LXC_TARGET};
        if ($target && $target eq 'reboot') {
-           # in order to make sure hot-plugged config changes aren't reverted
+           # In order to make sure hot-plugged config changes aren't reverted
            # to what the monitor initially loaded we need to stop the container
-           # and restart it
-           local $SIG{HUP} = 'IGNORE';
-           my $pid = fork();
-           die "fork failed during container reboot: $!\n" if !defined($pid);
-           if (!$pid) {
-               POSIX::setsid();
-               close STDIN;
-               close STDOUT;
-               close STDERR;
-               PVE::LXC::update_lxc_config($vmid, $conf);
-               exec {'lxc-start'} 'lxc-start', '-n', $vmid
-               or POSIX::_exit(-1);
-           }
+           # and restart it.
+           # Update the config and queue a restart of the pve-container@$vmid
+           # task, note that we must not block because we're part of the
+           # service cgroup systemd waits for to die before issuing the new
+           # lxc-start command.
+           PVE::LXC::update_lxc_config($vmid, $conf);
+           # Tell the post-stop hook we want to be restarted.
+           open(my $fh, '>', "/var/lib/lxc/$vmid/reboot")
+               or die "failed to create reboot trigger file: $!\n";
+           close($fh);
            # cause lxc to stop instead of rebooting
-           POSIX::_exit(1);
+           exit(1);
        }
 
        return undef;