[linux-l] Mailman in die Tonne?

Oliver Bandel oliver at first.in-berlin.de
Sa Feb 17 00:49:48 CET 2007


On Fri, Feb 16, 2007 at 06:43:43PM +0100, Ralph Angenendt wrote:
> Oliver Bandel wrote:
> > Ich hatte nur in Erinnerung,
> > daß da was mit Anzahl von prozessen nicht stimmte,
> > und man das via Perl und ps überwachen wollte.
> 
> Klar, du hast dann perl-Wrapper um python-Wrapper drumherumgeschrieben?
> Und welche "Writer" meintest du eigentlich in einer deiner ersten Mails?
> Die qrunner sind nur Reader.
> 
[...]

So, Script gefunden.



first at antilope:~/diverses$ ls -l mailman-checker.pl
-rwx------ 1 first wwwuser 1719 Mar 21  2005 mailman-checker.pl
first at antilope:~/diverses$ 


Die Logik des Scripts (also was ermittelt werden soll) geht auf
das zurück, was der mailman-Admin (IN-Berlin) damals brauchte.

So nach dem Motto (sinngemäß):

  "Ja, mailman hat manchmal Probleme."

  "Welche Probleme gibt es?!"

  "Wenn qrunner-Prozesse vom Mailman fehlen,
   macht der Mist."

  "Was heisst das? Versteh nix. Was für runner? Ach, egal.
   sag, was Du brauchst, dann baue ich Dir das."

  "OK, also folgendes: die Anzahl der qrunners (ps ax) könnte
   unter Umständen.... blah blah blah... und das müssen wir
   prüfen, dann wissen wir immer sofort, ob/wenn was schief hängt."

  "OK, baue ich Dir."


mailman war für mich dabei (mehr oder weniger) eine Blackbox.
Die Innereien von dem Ding muss ich nicht kennen, um festzustellen,
daß da was im Argen liegt, wenn man so einen Aufpasser braucht.

(Ich hatte mal bei Quagga nen Bug gefunden,
weil ich mir mal aus Spaß den Code anschauen wollte, weil ich hörte,
der Quagga kackt ab.... nach fünf Minuten ersten Bug gefunden. Das Späßchen
wollte ich mir mit mailman nicht auch noch antun, denn daß OSS so
schlampig gebaut ist (sein kann) kann einem auch den Abend versauen.)



Hier der Code vom mailman-checker.pl:

(...man könnte im letzten if noch etwas genauer schauen,
   also statt Gesamtanzahl-Check, einzeln auswerten...)

==========================================================
#!/usr/bin/perl -w

use strict;




##########################

sub array_sum
{
  my $sum = 0;
  foreach my $el (@_)
  {
    $sum += $el;
  }

  return $sum;
}


##########################


# get information about process status
# ------------------------------------
my $ps_output =`ps ax | grep mailman | grep Runner| grep -v grep`;

# split information into separated lines
# ------------------------------------
my @ps_lines = split /\n/, $ps_output;

##foreach my $x (@ps_lines){print "$x\n";}##chcking if ps_lines is correct

# grepping for number of occurrence of each process
# -------------------------------------------------
my $arch      = grep (/ArchRunner/, @ps_lines);
my $bounce    = grep (/BounceRunner/, @ps_lines);
my $incoming  = grep (/IncomingRunner/, @ps_lines);
my $news      = grep (/NewsRunner/, @ps_lines);
my $outgoing  = grep (/OutgoingRunner/, @ps_lines);
my $virgin    = grep (/VirginRunner/, @ps_lines);
my $retry     = grep (/RetryRunner/, @ps_lines);


# all processes at a glance
# -------------------------
my @alle_prozesse = ($arch, $bounce, $incoming, $news, $outgoing, $virgin, $retry);

my $num_of_processes = scalar (@alle_prozesse); # number of the processes per mailman to be watched



# checking, if all mailmans have the same number of Runner-processes
# ------------------------------------------------------------------
if( (array_sum(@alle_prozesse) / $num_of_processes ) != int(array_sum( @alle_prozesse) / $num_of_processes))
{
  print "array_sum:",  array_sum( @alle_prozesse) / 7, "\n" ;
  print "int(array_sum):",  int (array_sum( @alle_prozesse) / 7) ;
  print "Problem mit mailman!\n";
  print "@alle_prozesse"; # llok how many processes there are running
}



==========================================================


So, und nun rutscht mir alle mal den Puckel runter.


Ciao,
   Oliver



Mehr Informationen über die Mailingliste linux-l