Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6356[/thread]

Prozessstatus abfragen



<< |< 1 2 >| >> 17 Einträge, 2 Seiten
BungeeBug
 2004-06-22 20:50
#83663 #83663
User since
2004-03-16
54 Artikel
BenutzerIn
[default_avatar]
Hi,

ich habe vor für meinen Server ein "Ueberwachunsscript" zu proggen, dass in regelmaeßigen Abstaenden den Status eines / mehrere Prozesse abfrag und mich im Fall des Falles per EMail informiert das ein Prozess das weite gesucht hat. Nur habe ich in Perl Programmieung sogut wie keine Ahnung wie ich das anstelle. Es geht mir dabei hauptsaechlich um Serverdienste wie "Apache" "MySQLd" "ProFTPd".

Wie bekommt ich nun den Status? Es muss ja ohne Verbinung zu dem Server moeglich sein, da Programme wie "top" das ja auch koennen.

Danke schon mal fuer alle Benuehungen.
MfG
BungeeBug
[E|B]
 2004-06-22 23:16
#83664 #83664
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Mit ps -ax bekommst du die laufenden Prozesse.
Die liest du aus und prüfst dann.
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
BungeeBug
 2004-06-22 23:52
#83665 #83665
User since
2004-03-16
54 Artikel
BenutzerIn
[default_avatar]
Hi,

die Idee ist mir auch schon gekommen, nur das "wie" interessiert mich.
Ich habe, wie gesagt, noch sogut wie keine Ahnung von Perl und bin deswegen relativ "hilflos". Wenn mich noch jemand nen paar Ansaetze zeigen koennte?!

Danke!
MfG
BungeeBug
Ishka
 2004-06-23 00:09
#83666 #83666
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
erstmal sollte man bei ps das - weglassen.

Dann zu deiner Frage:
mit Backquotes ( ` ), oder qx() kannst du externe Prozesse aufrufen und ihr Ergebnis abfangen, also:
$ausgabe=`ps ax`;
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
BungeeBug
 2004-06-23 01:39
#83667 #83667
User since
2004-03-16
54 Artikel
BenutzerIn
[default_avatar]
Hi,

ich habe es nun ertwas anders geloest.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
open (PS,"ps ax|") or die("Fehler : $!");
  @ps = <PS>;
  foreach (@ps)
   {
    if (($_[15] eq "T") or ($_[15] eq "X") or ($_[15] eq "Z"))
     {
      print("Prozess abgeschmiert");
     }
   }
  close(PS);


Ich weis nicht ob das die "bessere" Loesung ist oder nicht aber es geht zumindest ... nicht.

Das Problem scheint die Auswertung des Status zu sein. Auf jedenfall schreibt das Ding jedesmal, das der Prozess nen Abganz gemacht hat. Welcher ist im Moment noch uninteressant aber wie es aussieht meldet er erst einmal jeden Prozess als tot.\n\n

<!--EDIT|BungeeBug|1087940435-->
MfG
BungeeBug
coax
 2004-06-23 04:44
#83668 #83668
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/perl

use strict;
use warnings;

my %PROCS = (
              httpd => 'Apache Webserver',
              mysqld => 'MySQL Server',
              dummy => 'nicht existierender Prozess',
            );

my %STATE = (
             S => 'am schlafen',
             R => 'am laufen',
             T => 'angehalten',
             Z => 'Zombie',
             D => 'im Koma'
            );

my @messages;
#my @found;

my $pattern =  '^(\w).+(' . join('|' => keys %PROCS) . ')';

open(PS, 'ps -A -o stat,cmd |') or die $!;

<PS>;

while(<PS>){
   if(/$pattern/) {
       push(@messages, sprintf("%s ist %s", $PROCS{$2}, $STATE{$1}));
#        push(@found, $2);
   }
}

close(PS);

print "$_\n" for @messages;

#delete @PROCS{@found};
#print "-" x 30,"\n";
#print "Prozess $_ nicht gefunden!\n" for keys %PROCS;


Wenn du die auskommentierten Anweisungen jetzt noch entkommentierst werden dir auch die Prozesse angezeigt die in der Prozesstabelle nicht gefunden wurden.

Viel Spasz damit :)

edit: Code gefixt.\n\n

<!--EDIT|coax|1088066839-->
,,Das perlt aber heute wieder...'' -- Dittsche
BungeeBug
 2004-06-23 11:19
#83669 #83669
User since
2004-03-16
54 Artikel
BenutzerIn
[default_avatar]
Wow danke .... damit muss ich jetzt erst mal fertig werden :)
MfG
BungeeBug
Crian
 2004-06-23 13:09
#83670 #83670
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Nur ein Kommentar am Rande:

[E|B
,22.06.2004, 21:16]Mit ps -ax bekommst du die laufenden Prozesse.
Die liest du aus und prüfst dann.


Ich benutze eigenltich meistens ps aux, also ohne das - und dafür mit der Option u (wobei das ja nur ein "user oriented" Format anzeigt, für ein Skript also wohl weniger empfehlenswert ist).
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Thorium
 2004-06-23 13:20
#83671 #83671
User since
2003-08-04
232 Artikel
BenutzerIn
[Homepage] [default_avatar]
Sonnst schau dir mal BigBrother von QuestSoft an
(ich glaub für den nicht-kommerziellen Gebrauch sogar gratis)

http://www.bb4.org/features.html\n\n

<!--EDIT|Thorium|1087982445-->
Per|li|nist der; -en, -en <zu ↑...ist>: a) Anhänger, Vertreter der radikalen Perlinisten die Perl als die einzig wahre Sprache ansehen; b) Mitglied einer perlinistischen Community.
BungeeBug
 2004-06-23 15:04
#83672 #83672
User since
2004-03-16
54 Artikel
BenutzerIn
[default_avatar]
Das ist ja langweilig ... da lern ich ja nie was. Selbst ist der Programmierer. Ausserdem moechte ich gerne wissen was meienen Server zerschossen hat :)
MfG
BungeeBug
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2004-06-22 20:50.