mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-19 10:34:01 +00:00
Only schedule services that start ok.
This commit is contained in:
30
bin/pt-agent
30
bin/pt-agent
@@ -5653,9 +5653,7 @@ sub get_services {
|
|||||||
# and starts running.
|
# and starts running.
|
||||||
|
|
||||||
# Start new services.
|
# Start new services.
|
||||||
# TODO: this probably can't/won't fail, but if it does, is it
|
my $started_ok = run_services(
|
||||||
# worth setting success=0?
|
|
||||||
run_services(
|
|
||||||
action => 'start',
|
action => 'start',
|
||||||
services => $sorted_services->{added},
|
services => $sorted_services->{added},
|
||||||
lib_dir => $lib_dir,
|
lib_dir => $lib_dir,
|
||||||
@@ -5664,7 +5662,7 @@ sub get_services {
|
|||||||
);
|
);
|
||||||
|
|
||||||
# Restart existing updated services.
|
# Restart existing updated services.
|
||||||
run_services(
|
my $restarted_ok = run_services(
|
||||||
action => 'restart',
|
action => 'restart',
|
||||||
services => $sorted_services->{updated},
|
services => $sorted_services->{updated},
|
||||||
lib_dir => $lib_dir,
|
lib_dir => $lib_dir,
|
||||||
@@ -5676,7 +5674,7 @@ sub get_services {
|
|||||||
# this call runs the service directly, whether it's meta or not,
|
# this call runs the service directly, whether it's meta or not,
|
||||||
# then it removes it from the services hashref so there's no
|
# then it removes it from the services hashref so there's no
|
||||||
# chance of running it again unless it's received again.
|
# chance of running it again unless it's received again.
|
||||||
run_services_once(
|
my $ran_once_ok = run_services_once(
|
||||||
services => $sorted_services->{services},
|
services => $sorted_services->{services},
|
||||||
lib_dir => $lib_dir,
|
lib_dir => $lib_dir,
|
||||||
bin_dir => $args{bin_dir}, # optional, for testing
|
bin_dir => $args{bin_dir}, # optional, for testing
|
||||||
@@ -5685,12 +5683,16 @@ sub get_services {
|
|||||||
|
|
||||||
# Schedule any services with a run_schedule or spool_schedule.
|
# Schedule any services with a run_schedule or spool_schedule.
|
||||||
# This must be called last, after write_services() and
|
# This must be called last, after write_services() and
|
||||||
# start_services() because, for example, a service schedule
|
# run_services() because, for example, a service schedule
|
||||||
# to run at */5 may run effectively immediate if we write
|
# to run at */5 may run effectively immediate if we write
|
||||||
# the new crontab at 00:04:59, so everything has to be
|
# the new crontab at 00:04:59, so everything has to be
|
||||||
# ready to go at this point.
|
# ready to go at this point.
|
||||||
schedule_services(
|
schedule_services(
|
||||||
services => $sorted_services->{services},
|
services => [
|
||||||
|
@$started_ok,
|
||||||
|
@$restarted_ok,
|
||||||
|
@$ran_once_ok,
|
||||||
|
],
|
||||||
lib_dir => $lib_dir,
|
lib_dir => $lib_dir,
|
||||||
bin_dir => $args{bin_dir}, # optional, for testing
|
bin_dir => $args{bin_dir}, # optional, for testing
|
||||||
exec_cmd => $args{exec_cmd}, # optional, for testing
|
exec_cmd => $args{exec_cmd}, # optional, for testing
|
||||||
@@ -5824,9 +5826,7 @@ sub schedule_services {
|
|||||||
# Only schedule "periodic" services, i.e. ones that run periodically,
|
# Only schedule "periodic" services, i.e. ones that run periodically,
|
||||||
# not just once.
|
# not just once.
|
||||||
my @periodic_services = grep { $_->run_schedule || $_->spool_schedule }
|
my @periodic_services = grep { $_->run_schedule || $_->spool_schedule }
|
||||||
sort { $a->name cmp $b->name }
|
@$services;
|
||||||
values %$services;
|
|
||||||
|
|
||||||
my $new_crontab = make_new_crontab(
|
my $new_crontab = make_new_crontab(
|
||||||
%args,
|
%args,
|
||||||
services => \@periodic_services,
|
services => \@periodic_services,
|
||||||
@@ -5926,6 +5926,7 @@ sub run_services {
|
|||||||
my $cmd_fmt = ($env_vars ? "$env_vars " : '')
|
my $cmd_fmt = ($env_vars ? "$env_vars " : '')
|
||||||
. $bin_dir . "pt-agent --run-service %s >> $log 2>&1";
|
. $bin_dir . "pt-agent --run-service %s >> $log 2>&1";
|
||||||
|
|
||||||
|
my @started_ok;
|
||||||
SERVICE:
|
SERVICE:
|
||||||
foreach my $service ( @$services ) {
|
foreach my $service ( @$services ) {
|
||||||
next if $service->meta; # only real services
|
next if $service->meta; # only real services
|
||||||
@@ -5975,12 +5976,13 @@ sub run_services {
|
|||||||
."$lib_dir/logs/$name.run");
|
."$lib_dir/logs/$name.run");
|
||||||
next SERVICE;
|
next SERVICE;
|
||||||
}
|
}
|
||||||
|
push @started_ok, $service;
|
||||||
_info("Started $name successfully");
|
_info("Started $name successfully");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return \@started_ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub run_services_once {
|
sub run_services_once {
|
||||||
@@ -6003,6 +6005,7 @@ sub run_services_once {
|
|||||||
my $cmd_fmt = ($env_vars ? "$env_vars " : '')
|
my $cmd_fmt = ($env_vars ? "$env_vars " : '')
|
||||||
. $bin_dir . "pt-agent --run-service %s >> $log 2>&1";
|
. $bin_dir . "pt-agent --run-service %s >> $log 2>&1";
|
||||||
|
|
||||||
|
my @started_ok;
|
||||||
SERVICE:
|
SERVICE:
|
||||||
foreach my $name ( sort keys %$services ) {
|
foreach my $name ( sort keys %$services ) {
|
||||||
my $service = $services->{$name};
|
my $service = $services->{$name};
|
||||||
@@ -6018,10 +6021,11 @@ sub run_services_once {
|
|||||||
."$lib_dir/logs/$name.run");
|
."$lib_dir/logs/$name.run");
|
||||||
next SERVICE;
|
next SERVICE;
|
||||||
}
|
}
|
||||||
|
push @started_ok, $service;
|
||||||
_info("Ran $name successfully");
|
_info("Ran $name successfully");
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return \@started_ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
# ########################## #
|
# ########################## #
|
||||||
@@ -6662,7 +6666,7 @@ sub stop_agent {
|
|||||||
_info("Removing all services from crontab...");
|
_info("Removing all services from crontab...");
|
||||||
eval {
|
eval {
|
||||||
schedule_services(
|
schedule_services(
|
||||||
services => {},
|
services => [],
|
||||||
lib_dir => $lib_dir,
|
lib_dir => $lib_dir,
|
||||||
quiet => 1,
|
quiet => 1,
|
||||||
);
|
);
|
||||||
|
Reference in New Issue
Block a user