Schrift
[thread]139[/thread]

suche perlscript, wenn ping 4x negativ, dann mail (Seite 2)



<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten
Strat
 2004-01-11 21:59
#826 #826
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
und
Code: (dl )
my @result = `ping -c 4 hostname`;

aber - wie gesagt - besser CPAN:Net::Ping verwenden...

In meiner "Einfuehrung in Perl" auf meiner HP unter Tips&Tricks steht sowas...\n\n

<!--EDIT|Strat|1073851180-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
betterworld
 2004-01-12 00:36
#827 #827
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Es ist immer etwas kritisch, Fehlermeldungen, die fuer Menschen bestimmt sind, zu parsen und automatisch auszuwerten. Schon wenn ein anderer User, der die locales nicht auf Deutsch gestellt hat, Dein Programm ausfuehrt, wird es scheitern. Auch ein Versionsupgrade von ping oder gettext kann Dir einen Strich durch die Rechnung machen.
Und in diesem Fall geht es tatsaechlich portabler und -- einfacher: Ping und damit system() hat einen Rueckgabewert, den Du nur ueberpruefen musst.

Weiterhin frage ich mich, warum Du Perl verwendest, da das Script zum allergroessten Teil aus Systemaufrufen besteht. Ich wuerde vorschlagen, entweder, wie schon zuvor empfohlen, die entsprechenden Perlmodule herzunehmen, oder das Script in Bash zu schreiben (es handelt sich offensichtlich um Linux). Beispiel:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if ping -c 4 example.com
then
 echo 'Alles klar'
 exit 0
else
 echo 'Ping geht nicht, ich versende eine eMail'
 sendmail -t <<EOF
From: me@here
To: you@there
Subject: Host down
EOF
  [ $? != 0 ] && echo 'Sendmail geht auch nicht :-('
  exit 1
fi


Das ist jetzt allerdings nicht getestet.\n\n

<!--EDIT|betterworld|1073860867-->
Dubu
 2004-01-12 01:07
#828 #828
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=cc,11.01.2004, 19:39]übrigens mit ping -c 4 X.X.X.X macht unter linux keine ewig
schleife
[/quote]
Richtig, aber das hatte [E|B] ja nicht geschrieben. :p

(Ja, ja, haette ich auch drauf hinweisen koennen, aber ich habe eben etwas dagegen, irgendwelche externen Programmaufrufe zu parsen, wenn es gute Perl-Module fuer den Zweck gibt. Ersteres ist meist kompliziert, wenig portabel und schneller b0rken, als man "ups" sagen kann. Wenn's das Perl-Modul nicht mehr tut, kann man zumindest jemand anderem die Schuld geben. ;))

Quote
if($result =~ /Zeitüberschreitung{4}/gi){

Du suchst wirklich den String "Zeitüberschreitungggg" (gross oder klein geschrieben) in $result? Das bedeutet naemlich diese Regex. ;)
cc
 2004-02-28 02:25
#829 #829
User since
2004-01-09
55 Artikel
BenutzerIn
[default_avatar]
das funktioniert, aber garantiert:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$mail="recipient\@domain.net";
$linux="sender\@domain.net";
$host="X.X.X.X";
$out=`ping -c8 $host | grep -c "bytes from"`;
if($out < 7){
open(MAIL, "|/usr/sbin/sendmail -t");
print MAIL "to:$mail\n";
print MAIL "from:$linux\n";
print MAIL "subject:server down !\n";
print MAIL "hi \n\n";
print MAIL "cannot ping server X.X.X.X \n\n";
print MAIL "Time: ". localtime(time) ." \n";
close(MAIL);
}
exit;

gruss
cc\n\n

<!--EDIT|cc|1078578953-->
Strat
 2004-02-28 12:16
#830 #830
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich finde es bewundernswert, wie viel muehe sich einige Leute geben, um absolut nicht portable und sichere scripten zu schreiben...
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#! /usr/bin/perl
use warnings;
use strict;
use Net::Ping;

my $host = 'irgendeinServer';
my $pingCount = 4;
my $ping = Net::Ping->new('icmp')
 or die "Error in creating Net::Ping-Object: $!\n";

if (my $count = grep { $ping->ping($host) } 1..$pingCount) {
 print "$count von $pingCount Versuchen erfolgreich";
} # if
else {
 # mail versenden hier, z.B. mit Mail::Sendmail, MIME::Lite, ...
 # ...
}

nicht getestet, aber muesste funktionieren\n\n

<!--EDIT|Strat|1077963523-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
cc
 2004-02-28 12:22
#831 #831
User since
2004-01-09
55 Artikel
BenutzerIn
[default_avatar]
hallo Strat

was ist ganau falsch an meinem script ?

gruss
cc
Strat
 2004-02-29 00:20
#832 #832
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
falsch ist es nicht unbedingt, aber:
Was spricht gegen die Verwendung von Net::Ping?
Wieso verwendest du sendmail direkt zum mails versenden? Ich habe in meinem Beruf so viele Kisten erlebt, bei denen sendmail entweder nicht vorhanden oder nicht konfiguriert oder falsch konfiguriert war, sodass es zum mailversenden nicht brauchbar war. Und wenn sendmail verwendbar ist, bist du immer sicher, dass es unter /usr/sbin/ liegt? Warum die Mails nicht ueber SMTP versenden?

warum sorgst du so ohne irgendwelche Notwendigkeit dafuer, dass es nur ein Teil der Leute benuetzen kann?
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
cc
 2004-03-02 22:14
#833 #833
User since
2004-01-09
55 Artikel
BenutzerIn
[default_avatar]
[quote=Strat,28.02.2004, 23:20]falsch ist es nicht unbedingt, aber:
Was spricht gegen die Verwendung von Net::Ping?
Wieso verwendest du sendmail direkt zum mails versenden? Ich habe in meinem Beruf so viele Kisten erlebt, bei denen sendmail entweder nicht vorhanden oder nicht konfiguriert oder falsch konfiguriert war, sodass es zum mailversenden nicht brauchbar war. Und wenn sendmail verwendbar ist, bist du immer sicher, dass es unter /usr/sbin/ liegt? Warum die Mails nicht ueber SMTP versenden?

warum sorgst du so ohne irgendwelche Notwendigkeit dafuer, dass es nur ein Teil der Leute benuetzen kann?[/quote]


weil ich mit sendmail und postfix noch nie ein problem gehabt habe !
steffenw
 2004-03-02 23:56
#834 #834
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Net::Ping läuft nicht unter Windows, wenn man Perl 5.6.x hat, weil dort $SIG{ALRM} auch nicht funktioniert. Mit 5.8.x habe ich $SIG{ALRM} zum laufen bekommen. Net::Ping hatte ich auf Arbeit gebraucht, da habe ich aber noch die alte Perl-Version, also rufe ich es so auf:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
sub Ping
{ my $ip = shift;   # Übergabe IP-Adresse
 my $pingmax = PingMax;
 my $answer = `ping -w 1000 -n $pingmax $ip`;
 DosToWin \$answer;   # Umlaute umwandeln
 my $number = scalar $answer =~ s/(Bytes=32)/$1/mg;
 $number == PingMax or do
 { $answer =~ s/^\s*\n//;   # führende Leerzeilen löschen
   $answer =~ s/\n\s*\n/\n/g;   # Leerzeilen löschen
 };
 return $number;
}

Ach und Mails senden kann ich auch nicht portabel. Es gibt keinen SMTP-Server, ich muß dafür Win32::OLE nehmen.\n\n

<!--EDIT|steffenw|1078264803-->
$SIG{USER} = sub {love 'Perl' or die};
ptk
 2004-03-03 13:36
#835 #835
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=steffenw,02.Mar..2004, 22:56]Ach und Mails senden kann ich auch nicht portabel. Es gibt keinen SMTP-Server, ich muß dafür Win32::OLE nehmen.[/quote]
Wie macht man das mit Win32::OLE?
<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten



View all threads created 2004-01-11 17:49.