fix #844: allow to pre-delay start-all-marked guests on boot
Add a simple ExecStartPre command which reads the local node config, and if a delay is set the helper sleeps that long then exists. The systemd-unit approach was chosen as this ensures that we really only delay when doing the startall on node boot. The pve-guests service does not allows manual stops, starts or restarts, it can only be pulled in by the multi-user.target Mark this command with "-" to tell systemd that errors of it should not cause an abort, it's a best-effort approach. The journal from a 2 second delay would look like: > Nov 19 13:13:48 dev6 systemd[1]: Starting PVE guests... > Nov 19 13:13:48 dev6 pve-startall-delay[2318]: Delaying on-boot 'startall' command for 2 second(s). > ... > Nov 19 13:13:50 dev6 pve-guests[2339]: <root@pam> starting task UPID:dev6:00000924:00000529:5DD3DC7E:startall::root@pam: Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
f36240c507
commit
1ff3fef0b0
@ -67,6 +67,14 @@ my $confdesc = {
|
||||
format => 'mac-addr',
|
||||
optional => 1,
|
||||
},
|
||||
'startall-onboot-delay' => {
|
||||
description => 'Initial delay in seconds, before starting all the Virtual Guests with on-boot enabled.',
|
||||
type => 'integer',
|
||||
minimum => 0,
|
||||
maximum => 300,
|
||||
default => 0,
|
||||
optional => 1,
|
||||
},
|
||||
};
|
||||
|
||||
my $acmedesc = {
|
||||
|
@ -66,6 +66,8 @@ check: $(addsuffix .service-api-verified, ${SERVICES}) $(addsuffix .api-verified
|
||||
install: ${SCRIPTS} ${CLI_MANS} ${SERVICE_MANS} pvemailforward ${BASH_COMPLETIONS} ${ZSH_COMPLETIONS}
|
||||
install -d ${BINDIR}
|
||||
install -m 0755 ${SCRIPTS} ${BINDIR}
|
||||
install -d ${USRSHARE}/helpers
|
||||
install -m 0755 pve-startall-delay ${USRSHARE}/helpers
|
||||
install -s -m 2755 -g www-data pvemailforward ${BINDIR}
|
||||
install -d ${MAN1DIR}
|
||||
install -m 0644 ${CLI_MANS} ${MAN1DIR}
|
||||
|
18
bin/pve-startall-delay
Executable file
18
bin/pve-startall-delay
Executable file
@ -0,0 +1,18 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use PVE::INotify;
|
||||
use PVE::NodeConfig;
|
||||
|
||||
my $local_node = PVE::INotify::nodename();
|
||||
|
||||
my $node_config = eval { PVE::NodeConfig::load_config($local_node) } // {};
|
||||
|
||||
if (my $delay = $node_config->{'startall-onboot-delay'}) {
|
||||
warn "Delaying on-boot 'startall' command for $delay second(s).\n";
|
||||
sleep($delay); # don't care for interrupts, best effort only
|
||||
}
|
||||
|
||||
exit 0;
|
@ -12,6 +12,7 @@ ZSHCOMPLDIR=${DESTDIR}/usr/share/zsh/vendor-completions/
|
||||
HARADIR=${DESTDIR}/usr/share/cluster
|
||||
DOCDIR=${DESTDIR}/usr/share/doc/${PACKAGE}
|
||||
PODDIR=${DESTDIR}/usr/share/doc/${PACKAGE}/pod
|
||||
USRSHARE=${DESTDIR}/usr/share/${PACKAGE}
|
||||
WWWBASEDIR=${DESTDIR}/usr/share/${PACKAGE}
|
||||
WWWIMAGEDIR=${WWWBASEDIR}/images
|
||||
WWWTOUCHDIR=${WWWBASEDIR}/touch
|
||||
|
@ -17,6 +17,7 @@ After=pve-ha-crm.service pve-ha-lrm.service
|
||||
|
||||
[Service]
|
||||
Environment="PVE_LOG_ID=pve-guests"
|
||||
ExecStartPre=-/usr/share/pve-manager/helpers/pve-startall-delay
|
||||
ExecStart=/usr/bin/pvesh --nooutput create /nodes/localhost/startall
|
||||
ExecStop=-/usr/bin/vzdump -stop
|
||||
ExecStop=/usr/bin/pvesh --nooutput create /nodes/localhost/stopall
|
||||
|
Loading…
Reference in New Issue
Block a user