Systembefehle und Fehlerbehandlung
Rolf
- cgi
0 Calocybe0 Michael Schröpl- perl
0 Rolf
0 Wolfgang Wiese0 Wolfgang Wiese0 Rolf
0 Danke
Rolf
Hallo,
wie kann ich verhinderen, dass sich ein über CGI aufgerufener und fehlgeschlagener Systembefehl im ERROR_LOG verewigt?
Viele Grüße, Rolf
if( system("ping -c 4 $ping_string > $ping_file") ){
print "<h4>Unbekannter Host oder Fehler im Ping-Befehl</h4>";
unlink $ping_file;
exit(0);
}
Hallo Rolf!
wie kann ich verhinderen, dass sich ein über CGI aufgerufener und fehlgeschlagener Systembefehl im ERROR_LOG verewigt?
AFAIK erscheinen im Errorlog die Ausgaben auf STDERR (ausser auf Dummbrot IIS natuerlich, aber der interessiert uns hier sicher nicht). Musst also einfach den Kanal auch umleiten, z.B.
system("ping -c 4 $ping_string > $ping_file 2> &1")
oder wenn Du die Fehlermeldungen ganz skippen willst
system("ping -c 4 $ping_string > $ping_file 2> /dev/null")
So lange
Hallo,
wie kann ich verhindern, dass sich ein über CGI aufgerufener und fehlgeschlagener Systembefehl im ERROR_LOG verewigt?Obwohl hier ein exit(0) steht, erfolgt ein Eintrag in die LOG-Datei
Was genau steht denn im ErrorLog?
if( system("ping -c 4 $ping_string > $ping_file") ){
»» print "<h4>Unbekannter Host oder Fehler im Ping-Befehl</h4>";
»» unlink $ping_file;
»» exit(0);
}
Hm. system() halte ich für keine elegante Lösung in Deinem Fall, und die Umleitung der Ausgabe in eine Datei für noch schlechter. (Was ist, wenn Dein Skript zweimal parallel gestartet wird?)
Wenn es Dir darum geht, die Ausgabe eines Kommandos aufzufangen, gibt es dafür die backticks (also $msg = ping -c 4 $ping\_string
, siehe Kapitel "I/O-Operatoren").
Falls Du auch noch den Returncode des Kommandos brauchst: "The status value of the command is returned in $?", siehe Kapitel "Variablen".
Hallo,
Was genau steht denn im ErrorLog?
ping: unknown host: werner.de
Hm. system() halte ich für keine elegante Lösung in Deinem Fall, und die Umleitung der Ausgabe in eine Datei für noch schlechter. (Was ist, wenn Dein Skript zweimal parallel gestartet wird?)
$temp_file = "/dir_x/$$.tmp";
Wenn es Dir darum geht, die Ausgabe eines Kommandos aufzufangen, gibt es dafür die backticks (also $msg =
ping -c 4 $ping\_string
, siehe Kapitel "I/O-Operatoren").
Falls Du auch noch den Returncode des Kommandos brauchst: "The status value of the command is returned in $?", siehe Kapitel "Variablen".
Das guck ich mir auf jeden Fall mal an; Rolf
HJi,
wie kann ich verhinderen, dass sich ein über CGI aufgerufener und fehlgeschlagener Systembefehl im ERROR_LOG verewigt?
wie waere es mit dieser Zeile gleich am Anfang des Codes:
open(STDERR,">>meine_error.log");
und bei system()-calls so:
system("$PROGRAMMNAME 2>&1 >> meine_error.log");
Ciao,
Wolfgang
reHi,
dazu was witziges: Es gibt wirklich ein ganzes _Modul_ dafuer, was
oben die eine Zeile macht....
(Ok, das Modul ist laenger, aber wenn ihr das ganze Geklapper darin weglaesst...)
Ciao,
Wolfgang
reHi,
dazu was witziges: Es gibt wirklich ein ganzes _Modul_ dafuer, was
oben die eine Zeile macht....
(Ok, das Modul ist laenger, aber wenn ihr das ganze Geklapper darin weglaesst...)Ciao,
»» Wolfgang
Stimmt Wolfgang, das Net::Ping Modul ist wirklich ein Witz ;-)# Rolf
Hallo, vielen Dank an Euch Alle!; Rolf
Hier noch ein paar Gedanken... das Temp-File heißt "/dir_x/$$.tmp" und somit hat jeder Prozess sein Eigenes... Aber den ganzen Kram mit einem Modul zu machen ist ne gute Idee; Rolf