On Jan 13, 2011 4:19 AM, "vasanth" <mailme.vasant...@gmail.com> wrote: > > Hi friends, > > Kindly help me regarding the issue Im facing with the below perl > script, > > I have a below script which send the message to Console. > > I need to modify this script it send message to a Log file. > > Please find the below steps which i performed to send a message to > log. > > Orginal Script: > =============== > return -1 on error > # 0 pkg is starting or running and switchable > # 1 pkg is starting or running and not switchable > # 2 pkg is not running > _show_pkg() { > local pkg=${1:-ALL} #i.e 'GENPKG1,GENPKG3' or 'ALL' or > 'GENPKG1' or ... > local mode=${2:-silent} #i.e 'normal' > > clustat -flx | perl -MXML::Twig -e' > my %S = (started => q/UP/, recoverable => q/FAILED/, pending > => q/FAILED/, stopped => q/DOWN/, failed => q/FAILED/, disabled => q/ > DOWN/ ); > my @A = split /,/, $ARGV[0]; > my ($ret,$cs) = (0,0); > my $twig = new XML::Twig(TwigRoots => {node => 1, group => 1}, > TwigHandlers => { node => sub { > my ($t,$n) = @_; > $cs = $ret = 1 unless ($n->att(rgmanager) eq q/1/ and $n->att(state) > eq q/1/); > }, > group => sub { > my ($t,$g) = @_; > my $pkg = (split /:/,$g->att(name))[1]; > return unless (q/ALL/ eq $A[0] or grep /$pkg/, @A); > my $owner = "on ".substr($g->att(owner),0,-2) if $g->att(state_str) eq > q/started/; > unless ($ARGV[1] eq q/silent/) { > print("State of $pkg is $S{$g->att(state_str)}"); > print(" $owner and ",($g->att(restarts)>0 or $cs)?"not":" "," > switchable") if $owner; > print "\n"; > } > $ret = 1 if $g->att(restarts)>0; > $ret = 2 unless $g->att(state_str) eq q/started/; > }}); > print(STDERR "Cannot open XML::Twig\n"), exit -1 unless > defined $twig; $twig->safe_parse(STDIN); exit $ret; > ' ${pkg} ${mode} > } > > Note ===> Steps > > 1. The output of the above script will display below information in > Screen ( console), it > will only display GENPKG{1..5} information on screen. > > [root@incciozr0846 hbha]# show_pkg > State of GENPKG1 is FAILED > State of GENPKG2 is FAILED > State of GENPKG3 is FAILED > State of GENPKG4 is FAILED > State of GENPKG5 is FAILED > [root@incciozr0846 hbha]# > > 2. I want to send the same message to log file, So I adopted the > script as shown below. > > my $file1 = "/tmp/pmon/usbs_manage_ha.log"; > open FILE, ">>$file1" or die "unable to open $file1 $!"; > > unless ($ARGV[1] eq q/silent/) { > print("State of $pkg is $S{$g->att(state_str)}"); > print FILE ("State of $pkg is $S{$g->att(state_str)} \n "); > print(" $owner and ",($g->att(restarts)>0 or $cs)?"not":" "," > switchable") if $owner ; > print FILE (" $owner and ",($g->att(restarts)>0 or $cs)?"not":" > "," switchable \n" ) if $owner ; > print "\n"; > } > close FILE or die; > > 3) Kindly note, Now im able to write to $file1 ("/tmp/pmon/ > usbs_manage_ha.log"), but its continiously writing to the > $file1 in loop, > > < extract of messgae in log > > > > #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#* > #H: show_pkg called by: bash[2208] at Sat Jan 19 03:46:41 CET 2002 > State of GENPKG1 is FAILED > State of GENPKG2 is FAILED > State of GENPKG3 is FAILED > State of GENPKG4 is FAILED > State of GENPKG5 is FAILED > #H: show_pkg (ret = 2) terminate at Sat Jan 19 03:46:41 CET 2002 > State of GENPKG5 is FAILED > State of GENPKG1 is FAILED > State of GENPKG2 is FAILED > State of GENPKG3 is FAILED > State of GENPKG4 is FAILED > State of GENPKG5 is FAILED > State of GENPKG1 is FAILED > State of GENPKG2 is FAILED > State of GENPKG3 is FAILED > State of GENPKG4 is FAILED > State of GENPKG5 is FAILED > State of GENPKG1 is FAILED > State of GENPKG2 is FAILED > State of GENPKG3 is FAILED > > > 4) Please provide your inputs to get rid of this loop, >
If the original script worked, why not use tee from the command line?