14.01.2014 13:42, Gary Stainburn пишет: > On Monday 13 January 2014 16:44:45 Vladimir Skubriev wrote: >> I need to know: "How I can list running jobs on client?" >> >> I want all runing jobs. >> >> I need this to determine is there are runing jobs already on the server. >> >> Or maybe status of my last restore job. But for example I don't remeber >> jobID. >> Thank you > Vladimir > > This may be overkill for what you want, but I have this very useful script > that I use for many jobs like that. > > I've set up a number of symlinks for each of the different modes, so I can do > something like: > > bgrep <clientname> > > Gary > > #!/usr/bin/perl -w > > use strict; > > my $prog=$0; > $prog=~s|^.*/||g; > my $format=''; # default to bconsole format > my %formats=('s'=>'std','i'=>'id','d'=>'delim','n'=>'none'); > my %options=('incRng'=>0,'incWtg'=>0,'format'=>'','execute'=>'','mode'=>''); > use Getopt::Long; > my $resp=GetOptions(\%options,"incRng|rng+","incWtg| > wtg+","totals+",'r+','w+','j+','cancel+', > "host|h=s","grep=s","exclude=s","mode=s","format=s", > "usage|help|?|version",'debug+'); > > &help() if $options{usage}; > $options{execute}='bacula_cancel !i' if $options{cancel}; > $options{mode}='bjobs' if $options{mode} eq 'jobs' || $options{j}; > $options{mode}='rng' if !$options{mode} && $options{r}; > $options{mode}='wtg' if !$options{mode} && $options{w}; > $options{mode}='bjobs' if $options{mode} eq 'jobs' || $options{j}; > $options{mode}='bjobs' if $options{mode} eq 'jobs' || $options{j}; > $options{mode}='bgrep' if $options{mode} eq 'grep'; > $options{mode}='bgrep' if !$options{mode} && $options{grep}; > $options{mode}='bjobs' if !$options{mode} && $options{host}; > $options{mode}=$prog unless $options{mode}; > $options{grep}=$ARGV[0]if ($prog eq 'bgrep' && !$options{grep} && $ARGV[0]); > $options{format}=($options{execute}) ? 'none' : 'std' unless $options{format}; > $options{format}=$formats{$options{format}} if $formats{$options{format}}; > > print "mode='$options{mode} > format=$options{format} -execute='$options{execute}\n" if $options{debug}; > die "No grep argument has been supplied" if $options{mode} eq 'bgrep' && ! > $options{grep}; > > if ($options{mode} eq 'rng') { $options{incRng}++;} > elsif ($options{mode} eq 'wtg') { $options{incWtg}++;} > elsif ($options{mode} eq 'bjobs') { $options{incRng}++; $options{incWtg}++;} > elsif ($options{mode} eq 'summary') { $options{totals}++;} > elsif ($options{mode} eq 'bgrep') { } > else { die "Invalid mode '$options{mode}'\n";} > > die "Invalid format $options{format}" unless ($options{format}=~/^(std|delim| > id|none)$/); > > > my @lines=`echo status dir|bconsole`; > > shift @lines while (@lines && $lines[0]!~/Running Jobs/); > shift @lines; # 'Running Jobs:' > shift @lines; # 'Console connected at 17-Dec-13 10:40' > shift @lines; # ' JobId Level Name Status' > shift @lines; > # '======================================================================' > > my %counts=('rng'=>0,'wtg'=>0); > foreach (@lines) { > chomp; > last if /^$/ || /^====$/; > print "****'$_'\n" if $options{debug}; > my $state='rng'; > if (/waiting for (higher|its start time)/) { $state='wtg'} # This > code excludes things like > elsif (/waiting/i && $_!~/waiting for/) { $state='wtg'}; # waiting for > storage device (running job) > $counts{$state}++; > print "state='$state'\n" if $options{debug}; > my $print=0; > $print=1 if $options{incRng} && $state eq'rng'; > $print=1 if $options{incWtg} && $state eq'wtg'; > $print=1 if $options{grep} && /$options{grep}/; > $print=0 if $options{exclude} && /$options{exclude}/; > next unless /^ (\d+) ([D|I|F])\w+ > +([a-zA-Z0-9]+)\.\d\d\d\d-\d\d-\d\d_\d\d\. > \d\d\.\d\d_\d\d (.*)$/; > my $id=$1; > my $level=$2; > my $host=$3; > $state=$4; > $state=~s/^is //; > $print=($host eq $options{host}) ? 1 : 0 if $options{host}; > next unless $print; > if ($options{format} eq'std') { print "$_\n";} > elsif ($options{format} eq'id') { print "$id\n";} > elsif ($options{format} eq'delim') { print "$id:$level:$host:$state\n";} > next unless $options{execute}; > my $cmd=$options{execute}; > $cmd=~s/!i/$id/g; > $cmd=~s/!h/$host/g; > $cmd=~s/!l/$level/g; > $cmd=~s/!s/$state/g; > my $reply=`$cmd`; > print "reply from '$cmd' is:\n************\n$reply\n************\n" if > $options{debug}; > $resp=$?>>8; > if ($resp) { print "response $resp returned from '$cmd'\n";} > } > if ($options{totals}) { > my $total=$counts{rng}+$counts{wtg}; > if ($options{format} eq'delim') { print "$counts{rng}:$counts{wtg}: > $total\n";} > else { print "$counts{rng} jobs running $counts{wtg} jobs waiting, total > $total\n";} > } > > sub help() { > print "Usage: $prog <options> > > -mode <mode> Selects the run mode, one of rng, wtg, grep, jobs > -r Sames as -mode rng. Lists all running jobs > -w Same as -mode wtg. Lists all waiting jobs > -j Same as -mode all. Lists all jobs > > If no mode is supplied, the program name is used. > If called as bgrep the 1st argument is the search > string > > -grep Supply a search string > -excludes Supply a search string to exlude > -host supply a host name to search for > -incRng Include running jobs > -incWtg Include waiting jobs > > The search priority is incRng,incWtg,grep,excludes > host overrides all other criteria > > -format <format> Select the output format, one of std, id, delim, none > The initial letter may be used > -execute <cmd> Execute a command for each selected line - > implies -format none unless overriden > String substitution on the command has the following > !i = ID > !h = host > !l = Level > !s = status > -cancel same as -execute bacula_cancel > > -debug Display debug information. Multiple calls increase the > level > -usage|help Display this help message > "; > exit; > > } # help > > # vim: ft=perl ai et > > =head1 NAME > > bjobs > > =head1 DESCRIPTION > > This program extracts the 'Running Jobs' section from the Bacula bconsole > status output, and then lists the jobs with a running state (incl waiting > for storage > > =head2 version history > > 2011-12-22 Initial creation > 2012-09-13 Added despooling as a running state > 2013-12-17 Version 2 complete rewrite to encorprage rng, wtg, bjobs > and added all the other arguments. > > =cut > Thank you very much. )
But this is of course overkill for me. I only want to say: "Why this is not upstream ?" echo message | mail -t k...@sibbald.com -- -- Faithfully yours, Vladimir Skubriev ------------------------------------------------------------------------------ CenturyLink Cloud: The Leader in Enterprise Cloud Services. Learn Why More Businesses Are Choosing CenturyLink Cloud For Critical Workloads, Development Environments & Everything In Between. Get a Quote or Start a Free Trial Today. http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk _______________________________________________ Bacula-users mailing list Bacula-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bacula-users