Hallo, Ich suche gerade wie wild in google nach einer Lösung für folgendes: Ich möchte: Ein Errorlog schreiben, wenn es einen Fehler gab. Ansonsten ein Do nothing do ;) Folgendes produziert aber IMMER ein log... Wenn kein Fehler kam ein log mit 0 bytes. [Ausschnitt einer While Schleife aus einem Perl sript] $aufruf = "/usr/bin/gs -q -dNOPAUSE -dBATCH -sDEVICE=jpeggray -r300x300 -sOutputFile=$ kundenverzeichnis/$ebene1/$ebene2/$ebene3/$name.jpg $pdfin/$file 1>> /scripts/log/$name_`date +%d%m%Y`.log 2> /dev/null"; p.s. stimmt das mit den Exit Status 1+2 ??? -- MfG Yann Wissenbach - Administration compass Gesellschaft fuer Medientechnologie mbH Fritz-Kohl-Str. 24 D-55122 Mainz mail: y.wissenbach@compass-online.de www : http://www.compass-online.de fon : +49 6131 32 85 4824 fax : +49 6131 32 85 499
Hi, 0n 03/05/27@15:05 Yann Wissenbach told me:
Ich suche gerade wie wild in google nach einer Lösung für folgendes:
Ich möchte: Ein Errorlog schreiben, wenn es einen Fehler gab. Ansonsten ein Do nothing do ;)
Folgendes produziert aber IMMER ein log... Wenn kein Fehler kam ein log mit 0 bytes.
[Ausschnitt einer While Schleife aus einem Perl sript] $aufruf = "/usr/bin/gs -q -dNOPAUSE -dBATCH -sDEVICE=jpeggray -r300x300 -sOutputFile=$ kundenverzeichnis/$ebene1/$ebene2/$ebene3/$name.jpg $pdfin/$file 1>> /scripts/log/$name_`date +%d%m%Y`.log 2> /dev/null";
Ich kenne perl nicht, aber das was Du da stehen hast sieht erstmal so aus, als wuerde es auch in bash funktionieren ;). Du leitest ja auch die Standardausgabe (1) in das logfile. Wenn es die Fehlerausgabe (2) sein soll, solltest Du die nicht nach /dev/null schicken.
p.s. stimmt das mit den Exit Status 1+2 ???
Mit exit status haben die 1+2 dort oben IMHO nix zu tun. -- bye maik
-----Original Message----- From: Maik Holtkamp [mailto:s-y-l@gmx.net] Sent: Tuesday, May 27, 2003 9:28 PM To: suse-linux@suse.com Subject: Re: Eigenes Log schreiben
Hi,
0n 03/05/27@15:05 Yann Wissenbach told me:
Ich suche gerade wie wild in google nach einer Lösung für folgendes:
Ich möchte: Ein Errorlog schreiben, wenn es einen Fehler gab. Ansonsten ein Do nothing do ;)
Folgendes produziert aber IMMER ein log... Wenn kein Fehler kam ein log mit 0 bytes.
[Ausschnitt einer While Schleife aus einem Perl sript] $aufruf = "/usr/bin/gs -q -dNOPAUSE -dBATCH -sDEVICE=jpeggray -r300x300 -sOutputFile=$ kundenverzeichnis/$ebene1/$ebene2/$ebene3/$name.jpg $pdfin/$file 1>> /scripts/log/$name_`date +%d%m%Y`.log 2> /dev/null";
Ich kenne perl nicht, aber das was Du da stehen hast sieht erstmal so aus, als wuerde es auch in bash funktionieren ;).
Du leitest ja auch die Standardausgabe (1) in das logfile. Wenn es die Fehlerausgabe (2) sein soll, solltest Du die nicht nach /dev/null schicken.
p.s. stimmt das mit den Exit Status 1+2 ???
Mit exit status haben die 1+2 dort oben IMHO nix zu tun.
Hallo, Ja, dieser Bash Befehl wird von Perl aus ausgeführt :) ups, 1+2 vertauscht ;-) leider wird dann trotzdem noch diese log datei angelegt - halt mit 0 Byte. Und da diese den Dateinamen beinhaltet, der sich ca 800x am Tag ändert könnte das schnell ausarten. Kann man das nicht "umgehen" ? Eine Idee war per cron auf das Log Verzeichnis zu schauen und alle 0 Byte grossen Dateien zu löschen. Begeistert bin ich davon aber nicht... Oder andere Möglichkeit: Kann ich den Inhalt von $name im Fehlerfall in eine Datei schreiben ? -- MfG Yann Wissenbach www : http://www.world-wide-wait.de http://www.vw-opel-ig.de mail : yann@world-wide-wait.de ICQ : 98297452 Linux - Life is too short for reboots
On Tue, 27 May 2003, Yann Wissenbach wrote:
Sent: Tuesday, May 27, 2003 9:28 PM
0n 03/05/27@15:05 Yann Wissenbach told me:
Folgendes produziert aber IMMER ein log... Wenn kein Fehler kam ein log mit 0 bytes.
[Ausschnitt einer While Schleife aus einem Perl sript] $aufruf = "/usr/bin/gs -q -dNOPAUSE -dBATCH -sDEVICE=jpeggray -r300x300 -sOutputFile=$ kundenverzeichnis/$ebene1/$ebene2/$ebene3/$name.jpg $pdfin/$file 1>> /scripts/log/$name_`date +%d%m%Y`.log 2> /dev/null";
Ich kenne perl nicht, aber das was Du da stehen hast sieht erstmal so aus, als wuerde es auch in bash funktionieren ;).
Du leitest ja auch die Standardausgabe (1) in das logfile. Wenn es die Fehlerausgabe (2) sein soll, solltest Du die nicht nach /dev/null schicken.
Ja, dieser Bash Befehl wird von Perl aus ausgeführt :) leider wird dann trotzdem noch diese log datei angelegt - halt mit 0 Byte.
Und da diese den Dateinamen beinhaltet, der sich ca 800x am Tag ändert könnte das schnell ausarten. Kann man das nicht "umgehen" ? Eine Idee war per cron auf das Log Verzeichnis zu schauen und alle 0 Byte grossen Dateien zu löschen. Begeistert bin ich davon aber nicht...
Oder andere Möglichkeit: Kann ich den Inhalt von $name im Fehlerfall in eine Datei schreiben ?
eine Moeglichkeit: gleich nach dem $aufruf noch folgendes ausfuehren (bash): find $Dateiname -size 0 -exec rm -f $Dateiname vorausgesetzt, dass in $Dateiname der Dateiname enthalten ist. Damit wuerde die Datei gleich wieder geloescht, wenn sie 0 Byte gross ist. siehe auch man 1 find Was auch gehen muesste, ist folgendes: shell-aufruf && echo "Alles ok" || "Fehler aufgetreten" Alles nach && wird ausgefuehrt, wenn der shell-Aufruf erfolgreich war (exit 0) und alles nach || wird ausgefuehrt, wenn ein non-zero exit-code vom shell-aufruf zurueckkommt. siehe man 1 bash Daraus kannst Du z.B. folgendes machen: $aufruf = $aufruf + " && rm -f $Dateiname" Das muesste, falls es keinen Fehler gab, also bei exit-code 0, die Log-Datei sofort wieder loeschen. MfG, Conrad Gliem, reg. Linux-User 250333
On Wed, May 28, 2003 at 12:34:21AM +0200, conrad@gliem.de wrote:
On Tue, 27 May 2003, Yann Wissenbach wrote:
Sent: Tuesday, May 27, 2003 9:28 PM
0n 03/05/27@15:05 Yann Wissenbach told me:
Folgendes produziert aber IMMER ein log... Wenn kein Fehler kam ein log mit 0 bytes.
[Ausschnitt einer While Schleife aus einem Perl sript] $aufruf = "/usr/bin/gs -q -dNOPAUSE -dBATCH -sDEVICE=jpeggray -r300x300 -sOutputFile=$ kundenverzeichnis/$ebene1/$ebene2/$ebene3/$name.jpg $pdfin/$file 1>> /scripts/log/$name_`date +%d%m%Y`.log 2> /dev/null";
hmm, und wenn Du das jetzt nicht in Dein Log schreibst sondern in einen String? Danach mit strlen oder wie auch immer das unter perl heissen mag :) prüfen ob da was drin steht und wenn ja in eine Datei schreiben und sonst einfach ignorieren?
Ich kenne perl nicht, aber das was Du da stehen hast sieht erstmal so aus, als wuerde es auch in bash funktionieren ;).
ACK
Du leitest ja auch die Standardausgabe (1) in das logfile. Wenn es die Fehlerausgabe (2) sein soll, solltest Du die nicht nach /dev/null schicken.
ACK
Und da diese den Dateinamen beinhaltet, der sich ca 800x am Tag ändert könnte das schnell ausarten. Kann man das nicht "umgehen" ?
ja schreib alle log Einträge in _eine_ Datei.
Oder andere Möglichkeit: Kann ich den Inhalt von $name im Fehlerfall in eine Datei schreiben ?
wie währe es mit eine Prüfung des exitcodes. 0 == OK Wenn != 0 Fehler in Datei Packen sonst nix tun.
eine Moeglichkeit: gleich nach dem $aufruf noch folgendes ausfuehren (bash): find $Dateiname -size 0 -exec rm -f $Dateiname vorausgesetzt, dass in $Dateiname der Dateiname enthalten ist. Damit wuerde die Datei gleich wieder geloescht, wenn sie 0 Byte gross ist. siehe auch man 1 find
zuerst erstellen dann Löschen und das 800 mal am Tag... nicht so gut für die Platte :) von der Sinn frage mal ganz abgesehen :)
Was auch gehen muesste, ist folgendes: shell-aufruf && echo "Alles ok" || "Fehler aufgetreten"
das sieht doch gut aus.
Alles nach && wird ausgefuehrt, wenn der shell-Aufruf erfolgreich war (exit 0) und alles nach || wird ausgefuehrt, wenn ein non-zero exit-code vom shell-aufruf zurueckkommt. siehe man 1 bash Daraus kannst Du z.B. folgendes machen: $aufruf = $aufruf + " && rm -f $Dateiname" Das muesste, falls es keinen Fehler gab, also bei exit-code 0, die Log-Datei sofort wieder loeschen.
äh nooeee doch nicht "sorum" Wenn Fehler dann Log schreiben ist doch wohl sinnvoller, oder? Greetings Daniel -- Darkness is falling, over my mind | http://www.againsttcpa.com/ My burning eyes are, deadly blind | http://www.notcpa.org/ Now there is nothing like it seem | http://chaosradio.ccc.de/cr78.html All illusion, only dreams........ --- Darkwell "Realm Of Darkness"
-----Original Message----- From: Daniel Lord [mailto:d_lord@gmx.de] Sent: Wednesday, May 28, 2003 5:36 PM To: suse-linux@suse.com Subject: Re: Eigenes Log schreiben
On Wed, May 28, 2003 at 12:34:21AM +0200, conrad@gliem.de wrote:
On Tue, 27 May 2003, Yann Wissenbach wrote:
Sent: Tuesday, May 27, 2003 9:28 PM
0n 03/05/27@15:05 Yann Wissenbach told me:
Folgendes produziert aber IMMER ein log... Wenn kein Fehler kam ein log mit 0 bytes.
[Ausschnitt einer While Schleife aus einem Perl sript] $aufruf = "/usr/bin/gs -q -dNOPAUSE -dBATCH -sDEVICE=jpeggray -r300x300 -sOutputFile=$ kundenverzeichnis/$ebene1/$ebene2/$ebene3/$name.jpg $pdfin/$file 1>> /scripts/log/$name_`date +%d%m%Y`.log 2> /dev/null";
hmm, und wenn Du das jetzt nicht in Dein Log schreibst sondern in einen String? Danach mit strlen oder wie auch immer das unter perl heissen mag :) prüfen ob da was drin steht und wenn ja in eine Datei schreiben und sonst einfach ignorieren?
müsste ich mich mal intensiver mit perl beschäftigen ;) [...]
Und da diese den Dateinamen beinhaltet, der sich ca 800x am Tag ändert könnte das schnell ausarten. Kann man das nicht "umgehen" ?
ja schreib alle log Einträge in _eine_ Datei.
das dumme ist nur, dass in dem gs Fehler nicht der Dateianem ($name bzw. $file) drin steht :-(
Oder andere Möglichkeit: Kann ich den Inhalt von $name im Fehlerfall in eine Datei schreiben ?
wie währe es mit eine Prüfung des exitcodes. 0 == OK Wenn != 0 Fehler in Datei Packen sonst nix tun.
wäre eine relativ einfache Möglichkeit...
eine Moeglichkeit: gleich nach dem $aufruf noch folgendes ausfuehren (bash): find $Dateiname -size 0 -exec rm -f $Dateiname vorausgesetzt, dass in $Dateiname der Dateiname enthalten ist. Damit wuerde die Datei gleich wieder geloescht, wenn sie 0 Byte gross ist. siehe auch man 1 find
zuerst erstellen dann Löschen und das 800 mal am Tag... nicht so gut für die Platte :) von der Sinn frage mal ganz abgesehen :)
hatte ich ja geschriebenn - finde ich nicht doll ! das wäre so M$ prinzip. erstmal alles drauf packen, und dann später wegschmeissen, was man nicht braucht ;))
Was auch gehen muesste, ist folgendes: shell-aufruf && echo "Alles ok" || "Fehler aufgetreten"
das sieht doch gut aus.
werde am Freitag auch mal probieren, ob das nicht nur gut aussieht ! [...] Danke für die Tipps ! -- MfG Yann Wissenbach www : http://www.world-wide-wait.de http://www.vw-opel-ig.de mail : yann@world-wide-wait.de ICQ : 98297452 Linux - Life is too short for reboots
Hallo, On Wed, 28 May 2003, conrad@gliem.de wrote:
On Tue, 27 May 2003, Yann Wissenbach wrote:
Sent: Tuesday, May 27, 2003 9:28 PM
0n 03/05/27@15:05 Yann Wissenbach told me:
Folgendes produziert aber IMMER ein log... Wenn kein Fehler kam ein log mit 0 bytes.
[Ausschnitt einer While Schleife aus einem Perl sript] $aufruf = "/usr/bin/gs -q -dNOPAUSE -dBATCH -sDEVICE=jpeggray -r300x300 -sOutputFile=$ kundenverzeichnis/$ebene1/$ebene2/$ebene3/$name.jpg $pdfin/$file 1>> /scripts/log/$name_`date +%d%m%Y`.log 2> /dev/null";
Ich kenne perl nicht, aber das was Du da stehen hast sieht erstmal so aus, als wuerde es auch in bash funktionieren ;).
Du leitest ja auch die Standardausgabe (1) in das logfile. Wenn es die Fehlerausgabe (2) sein soll, solltest Du die nicht nach /dev/null schicken.
Ja, dieser Bash Befehl wird von Perl aus ausgeführt :) leider wird dann trotzdem noch diese log datei angelegt - halt mit 0 Byte.
Und da diese den Dateinamen beinhaltet, der sich ca 800x am Tag ändert könnte das schnell ausarten. Kann man das nicht "umgehen" ? Eine Idee war per cron auf das Log Verzeichnis zu schauen und alle 0 Byte grossen Dateien zu löschen. Begeistert bin ich davon aber nicht...
Oder andere Möglichkeit: Kann ich den Inhalt von $name im Fehlerfall in eine Datei schreiben ?
eine Moeglichkeit: gleich nach dem $aufruf noch folgendes ausfuehren (bash): find $Dateiname -size 0 -exec rm -f $Dateiname vorausgesetzt, dass in $Dateiname der Dateiname enthalten ist.
Oerks. Bash: test -s $Dateiname || rm $Dateiname Perl: if ( -z $Dateiname ) { unlink($Dateiname); } Genauer gesagt sollte man also das Logfile _vor_ dem Kommando festlegen, dann das Kommando ausfuheren und dann ggfs. das Log loeschen. Perl: ==== ungetestet und unsauber ==== use strict; use POSIX qw(strftime); my $DS = '/'; my $name = "foo"; my $kundenverzeichnis = "/bla"; my $ebene1 = "blubb"; my $ebene2 = "laber"; my $ebene3 = "suelz"; my $logfilename = "/scripts/log/" . $name . strftime("%Y%m%d", localtime()) . ".log"; my @cmd = ( "/usr/bin/gs", "-q", "-dNOPAUSE", "-dBATCH", "-sDEVICE=jpeggray" "-r300x300", "-sOutputFile=" . "${kundenverzeichnis}${DS}${ebene1}${DS}${ebene2}${DS}${ebene3}${DS}" . "$name.jpg" "$pdfin/$file" ">/dev/null", "2>>$logfilename" ); system(@cmd); if ( ($? >> 8) == 0 || -z $logfilename ) { unlink($logfilename); } ==== -dnh -- 187: ~ftp/pub/incoming/ Angeklagter, warum hatte der Briefkasten, in dem das rechtspornographische und kinderradikale Material (Beweisstück A) sichergestellt wurde, das Sie nicht bestellt zu haben behaupten, einen öffentlich zugänglichen Einwurfschlitz? (Anselm Lingnau)
participants (6)
-
conrad@gliem.de
-
Daniel Lord
-
David Haller
-
Maik Holtkamp
-
Yann Wissenbach
-
Yann Wissenbach