make script timeout configureable

This commit is contained in:
Christoph Klaffl 2018-10-16 17:54:37 +02:00
parent a7b7fe8d15
commit a8d5c5652a
No known key found for this signature in database
GPG Key ID: FC1C525C2A47CC28
3 changed files with 15 additions and 10 deletions

16
sanoid
View File

@ -302,11 +302,10 @@ sub prune_snapshots {
my $dataset = (split '@', $snap)[0];
my $snapname = (split '@', $snap)[1];
if ($config{$dataset}{'pruning_script'}) {
my $timeout = 5;
$ENV{'SANOID_TARGET'} = $dataset;
$ENV{'SANOID_SNAPNAME'} = $snapname;
if ($args{'verbose'}) { print "executing pruning_script '".$config{$dataset}{'pruning_script'}."' on dataset '$dataset'\n"; }
my $ret = runscript('pruning_script',$dataset,$timeout);
my $ret = runscript('pruning_script',$dataset);
delete $ENV{'SANOID_TARGET'};
delete $ENV{'SANOID_SNAPNAME'};
@ -475,7 +474,7 @@ sub take_snapshots {
$ENV{'SANOID_TARGET'} = $dataset;
$ENV{'SANOID_SNAPNAME'} = $snapname;
if ($args{'verbose'}) { print "executing pre_snapshot_script '".$config{$dataset}{'pre_snapshot_script'}."' on dataset '$dataset'\n"; }
my $ret = runscript('pre_snapshot_script',$dataset,$timeout);
my $ret = runscript('pre_snapshot_script',$dataset);
delete $ENV{'SANOID_TARGET'};
delete $ENV{'SANOID_SNAPNAME'};
@ -498,7 +497,7 @@ sub take_snapshots {
$ENV{'SANOID_TARGET'} = $dataset;
$ENV{'SANOID_SNAPNAME'} = $snapname;
if ($args{'verbose'}) { print "executing post_snapshot_script '".$config{$dataset}{'post_snapshot_script'}."' on dataset '$dataset'\n"; }
runscript('post_snapshot_script',$dataset,$timeout);
runscript('post_snapshot_script',$dataset);
delete $ENV{'SANOID_TARGET'};
delete $ENV{'SANOID_SNAPNAME'};
@ -1358,12 +1357,15 @@ sub removecachedsnapshots {
sub runscript {
my $key=shift;
my $dataset=shift;
my $timeout=shift;
my $timeout=$config{$dataset}{'script_timeout'};
my $ret;
eval {
local $SIG{ALRM} = sub { die "alarm\n" };
alarm $timeout;
if ($timeout gt 0) {
local $SIG{ALRM} = sub { die "alarm\n" };
alarm $timeout;
}
$ret = system($config{$dataset}{$key});
alarm 0;
};

View File

@ -74,12 +74,14 @@
### run script after snapshot
### dataset name will be supplied as an environment variable $SANOID_TARGET
post_snapshot_script = /path/to/script.sh
### dataset name will be supplied as an environment variable $SANOID_TARGET
pruning_script = /path/to/script.sh
### don't take an inconsistent snapshot
#no_inconsistent_snapshot = yes
### run post_snapshot_script when pre_snapshot_script is failing
#force_post_snapshot_script = yes
### dataset name will be supplied as an environment variable $SANOID_TARGET
pruning_script = /path/to/script.sh
### limit allowed execution time of scripts before continuing (<= 0 -> infinite)
script_timeout = 5
[template_ignore]
autoprune = no

View File

@ -17,9 +17,10 @@ use_template =
process_children_only =
pre_snapshot_script =
post_snapshot_script =
pruning_script =
script_timeout = 5
no_inconsistent_snapshot =
force_post_snapshot_script =
pruning_script =
# If any snapshot type is set to 0, we will not take snapshots for it - and will immediately
# prune any of those type snapshots already present.