Archiv verlassen und diese Seite im Standarddesign anzeigen : date grep Sprachproblem
Ich weiß klingt komisch aber lasst es mich erklären.
Meine localisierung ist deutsch. Demzufolge ist auch meine date ausgabe natürlich deutsch
So 9. Mär
Dummerweise sind die Datumsangaben in meinen Logfiles englisch.
Mar 9
Wie kann ich in meinen logfiles nach dem datum grabben mit dem Befehl.
date +'%D'
Das soll nur ein Beispiel sein. Ich kann es mir später noch zurecht biegen. Aber ihr seht mein Problem mit der englischen Ausgabe im Logfile und er deustchen ausgabe von date.
ContainerDriver
09-03-2008, 13:08
Hallo,
man könnte vor dem Aufruf von date die Umgebungsvariable $LANG neu setzen, zumindest hier funktioniert es.
florian@leuchtturm0:~$ echo $LANG
de_DE.utf8
florian@leuchtturm0:~$ date
So 9. Mär 14:15:25 CET 2008
florian@leuchtturm0:~$ LANG=en_EN.utf8
florian@leuchtturm0:~$ echo $LANG
en_EN.utf8
florian@leuchtturm0:~$ date
Sun Mar 9 14:15:32 CET 2008
.
Gruß, Florian
Ich glaub das wäre etwas hart gegriffen. Ich habe von
LANG_TIME=C
gelesen. Leider klappt das bei mir nicht.
Vielleicht wäre das ehr ein Ansatz. Irgendwie. Wenn einer weiß wie genau es geht :rolleyes:
ContainerDriver
09-03-2008, 13:20
Ich glaub das wäre etwas hart gegriffen. Ich habe von
LANG_TIME=C
gelesen. Leider klappt das bei mir nicht.
Vielleicht wäre das ehr ein Ansatz. Irgendwie. Wenn einer weiß wie genau es geht :rolleyes:
Hmm, mit LANG_TIME funktioniert es hier auch nicht.
Was meinst du denn mit hart gegriffen? Wenn du $LANG in einer Subshell neu setzt und dort das date ausführt, passiert doch eigentlich nichts weiter?
florian@leuchtturm0:~/tmp$ cat date.sh
#!/bin/sh
echo $LANG;
date;
cmd="LANG=en_EN.utf8 && date";
datum_auf_englisch=`eval $cmd`;
echo "::"$datum_auf_englisch;
echo $LANG;
date;
florian@leuchtturm0:~/tmp$ ./date.sh
de_DE.utf8
So 9. Mär 14:28:43 CET 2008
::Sun Mar 9 14:28:43 CET 2008
de_DE.utf8
So 9. Mär 14:28:43 CET 2008
Ok ich wollte es mir mal anschauen. Leider gibt es folgende Ausgabe bei mir
de_DE.utf8
So 9. Mär 14:24:23 CET 2008
::So 9. Mär 14:24:23 CET 2008
de_DE.utf8
So 9. Mär 14:24:23 CET 2008
Irgendetwas will mit meiner LANG Variable nicht ganz.
komisch
set | grep LANG
GDM_LANG=de_DE.utf8
LANG=en_EN.utf8
Und dennoch ist meine date Ausgabe deutsch
ContainerDriver
09-03-2008, 13:36
Hmm, habe gerade mal locale ausgeführt und da wurde die Variable LC_TIME angezeigt, wenn ich die mit en_EN.utf8 neu setze, dann kommt bei mir auch die englische Ausgabe:
florian@leuchtturm0:~/tmp$ cat date.sh
#!/bin/sh
locale;
date;
cmd="export LC_TIME=en_EN.utf8 && date";
datum_auf_englisch=`eval $cmd`;
echo "::"$datum_auf_englisch;
locale;
date;
florian@leuchtturm0:~/tmp$ ./date.sh
LANG=de_DE.utf8
LC_CTYPE="de_DE.utf8"
LC_NUMERIC="de_DE.utf8"
LC_TIME="de_DE.utf8"
LC_COLLATE=C
LC_MONETARY="de_DE.utf8"
LC_MESSAGES="de_DE.utf8"
LC_PAPER="de_DE.utf8"
LC_NAME="de_DE.utf8"
LC_ADDRESS="de_DE.utf8"
LC_TELEPHONE="de_DE.utf8"
LC_MEASUREMENT="de_DE.utf8"
LC_IDENTIFICATION="de_DE.utf8"
LC_ALL=
So 9. Mär 14:43:45 CET 2008
::Sun Mar 9 14:43:45 CET 2008
LANG=de_DE.utf8
LC_CTYPE="de_DE.utf8"
LC_NUMERIC="de_DE.utf8"
LC_TIME="de_DE.utf8"
LC_COLLATE=C
LC_MONETARY="de_DE.utf8"
LC_MESSAGES="de_DE.utf8"
LC_PAPER="de_DE.utf8"
LC_NAME="de_DE.utf8"
LC_ADDRESS="de_DE.utf8"
LC_TELEPHONE="de_DE.utf8"
LC_MEASUREMENT="de_DE.utf8"
LC_IDENTIFICATION="de_DE.utf8"
LC_ALL=
So 9. Mär 14:43:45 CET 2008.
Klappt das bei dir?
Irgendwie nicht mein Tag heute
marko@notebookmarko ~/Skripte $ ./test
LANG=de_DE.utf8
LC_CTYPE="de_DE.utf8"
LC_NUMERIC="de_DE.utf8"
LC_TIME="de_DE.utf8"
LC_COLLATE="de_DE.utf8"
LC_MONETARY="de_DE.utf8"
LC_MESSAGES="de_DE.utf8"
LC_PAPER="de_DE.utf8"
LC_NAME="de_DE.utf8"
LC_ADDRESS="de_DE.utf8"
LC_TELEPHONE="de_DE.utf8"
LC_MEASUREMENT="de_DE.utf8"
LC_IDENTIFICATION="de_DE.utf8"
LC_ALL=de_DE.utf8
So 9. Mär 14:41:46 CET 2008
::So 9. Mär 14:41:46 CET 2008
LANG=de_DE.utf8
LC_CTYPE="de_DE.utf8"
LC_NUMERIC="de_DE.utf8"
LC_TIME="de_DE.utf8"
LC_COLLATE="de_DE.utf8"
LC_MONETARY="de_DE.utf8"
LC_MESSAGES="de_DE.utf8"
LC_PAPER="de_DE.utf8"
LC_NAME="de_DE.utf8"
LC_ADDRESS="de_DE.utf8"
LC_TELEPHONE="de_DE.utf8"
LC_MEASUREMENT="de_DE.utf8"
LC_IDENTIFICATION="de_DE.utf8"
LC_ALL=de_DE.utf8
So 9. Mär 14:41:46 CET 2008
Vielleicht kann man mein eigentliches Problem ja anders lösen.
Ich möchte ein Skript schreiben welches ein Log File ausliest und mir lediglich die Zeilen ausgibt, welches das aktuelle Datum enthält.
Mir geht es darum zu sehen ob clamav oder besser freshclam ein update gemacht hat und wie es ausgegangen ist.
Mein Logfile sieht so aus
Sat Mar 8 21:48:35 2008 -> --------------------------------------
Sat Mar 8 21:48:35 2008 -> freshclam daemon 0.92.1 (OS: linux-gnu, ARCH: i386, CPU: i686)
Sat Mar 8 21:48:35 2008 -> ClamAV update process started at Sat Mar 8 21:48:35 2008
Sat Mar 8 21:48:41 2008 -> main.cvd is up to date (version: 45, sigs: 169676, f-level: 21, builder: sven)
Sat Mar 8 21:48:41 2008 -> daily.inc is up to date (version: 6173, sigs: 56718, f-level: 26, builder: ccordes)
Sat Mar 8 21:48:41 2008 -> --------------------------------------
Sun Mar 9 09:48:40 2008 -> Received signal: wake up
Sun Mar 9 09:48:40 2008 -> ClamAV update process started at Sun Mar 9 09:48:40 2008
Sun Mar 9 09:48:40 2008 -> main.cvd is up to date (version: 45, sigs: 169676, f-level: 21, builder: sven)
Sun Mar 9 09:48:40 2008 -> Downloading daily-6174.cdiff [100%]
Sun Mar 9 09:48:41 2008 -> Downloading daily-6175.cdiff [100%]
Sun Mar 9 09:48:41 2008 -> Downloading daily-6176.cdiff [100%]
Sun Mar 9 09:48:41 2008 -> Downloading daily-6177.cdiff [100%]
Sun Mar 9 09:48:41 2008 -> Downloading daily-6178.cdiff [100%]
Sun Mar 9 09:48:41 2008 -> Downloading daily-6179.cdiff [100%]
Sun Mar 9 09:48:41 2008 -> Downloading daily-6180.cdiff [100%]
Sun Mar 9 09:48:41 2008 -> Downloading daily-6181.cdiff [100%]
Sun Mar 9 09:48:41 2008 -> daily.inc updated (version: 6181, sigs: 57701, f-level: 26, builder: ccordes)
Sun Mar 9 09:48:41 2008 -> Database updated (227377 signatures) from database.clamav.net (IP: 194.47.250.218)
Sun Mar 9 09:48:41 2008 -> Clamd successfully notified about the update.
Sun Mar 9 09:48:41 2008 -> --------------------------------------
Sun Mar 9 10:26:33 2008 -> --------------------------------------
Sun Mar 9 10:26:33 2008 -> freshclam daemon 0.92.1 (OS: linux-gnu, ARCH: i386, CPU: i686)
Sun Mar 9 10:26:33 2008 -> ClamAV update process started at Sun Mar 9 10:26:33 2008
Sun Mar 9 10:26:39 2008 -> main.cvd is up to date (version: 45, sigs: 169676, f-level: 21, builder: sven)
Sun Mar 9 10:26:39 2008 -> Downloading daily-6182.cdiff [100%]
Sun Mar 9 10:26:39 2008 -> daily.inc updated (version: 6182, sigs: 57708, f-level: 26, builder: ccordes)
Sun Mar 9 10:26:39 2008 -> Database updated (227384 signatures) from database.clamav.net (IP: 65.120.238.5)
Sun Mar 9 10:26:39 2008 -> Clamd successfully notified about the update.
ContainerDriver
09-03-2008, 13:56
Habe gerade nochmal die Manpage gelesen, was bekommst du denn für eine Ausgabe bei "date -R"?
super
schon mal ein prima Anfang
date -R
Sun, 09 Mar 2008 15:15:29 +0100
Jetzt muß es weiter gehen. Er muß jetzt das Format vom Log File erkennen.
Sun Mar 9
Jetzt meckert date aber über mehrere Ausgabeformate
date -R +%m
So schwer kann es doch eigentlich nicht sein, oder?
ContainerDriver
09-03-2008, 14:32
Mit date direkt wird man wohl nicht hinkommen, aber man kann die Ausgabe ja mit awk umformatieren:
florian@leuchtturm0:~$ date -R|awk '{printf("%.3s %s %d\n",$1,$3,$2)}'
Sun Mar 9
.
PERFECT
Vielen lieben Dank für Eure Hilfe. Jetzt ist allesso wie ich es brauche.
Ich wünsche Euch allen noch einen schönen ruhigen Sonntag.
Gruß
Leon
OK eine Kleinigkeit habe ich doch noch, Sorry!
grep "`date -R | awk '{printf("%.3s %s %d\n",$1,$3,$2)}'`" /var/log/clamav/freshclam.log
Klappt super. Jetzt möchte ich das in ein echo Befehl einbauen. Leider gibt es da Probleme.
echo "`grep "`date -R | awk '{printf("%.3s %s %d\n",$1,$3,$2)}'`" /var/log/clamav/freshclam.log`"
Ist wohl etwas zu viel des guten, hihi.
Weiß da einer noch einen Rat?
Schöner wäre glaube es mit cat zu machen
cat /var/log/clamav/freshclam.log | grep "`date -R | awk '{printf("%.3s %s %d\n",$1,$3,$2)}'`"
Das geht super. Und wie jetzt mit echo davor??
Ich nehme alles zurück. Habe es mit etwas probieren doch noch alleine geschafft. Vielen Dank
Gruß Leon
Moin,
...
echo "`grep "`date -R | awk '{printf("%.3s %s %d\n",$1,$3,$2)}'`" /var/log/clamav/freshclam.log`"
...
Erste Frage: Wozu brauchst Du einen echo davor, wenn grep Dir das Ergebnis eh auf STDOUT ausgibt?
Zum date-awk-Konstrukt: Doch, der date kann das ganz allein:
jan@jack:~/tmp> LC_TIME=en_EN.utf8 date +"%a %b %e"
Mon Mar 10
Damit bist Du auch gleich die Sorge wegen des zusätzlichen Leerzeichens im printf des awk los. Da stehen nämlich 2 Blanks vor %d - das dürfte ab heute, also bei 2-stelligen Tagen für Unmut sorgen ;-) Wenn schon, dann die Formatierung lieber so: "%.3s %s %2d\n".
Deine Konstruktion oben hat schlicht und einfach ein paar Fehler. Du musst richtig escapen, dann klappts auch (ungetestet, hab grad kein clamav-Log da):
echo "`grep \"\`date -R | awk '{printf(\\\"%.3s %s %2d\n\\\",$1,$3,$2)}'\`\" /var/log/clamav/freshclam.log`"
Nich so hübsch, ne? Vielleicht ist dann ja die Variante mit date allein doch besser:
LC_TIME=en_EN.utf8 grep "`date +\"%a %b %e\"`" /var/log/clamav/freshclam.logUnd wenn Du mir verrätst, warum Du unbedingt ein echo brauchst (die Ausgabe sieht genauso aus ohne), dann verrate ich auch, wie das geht ;-)
Jan
Hi
Vielen Dank für Dein schreiben. Wir hatten ja weiter oben festgestellt das das setzen der LC_TIME bei mir, warum auch immer, keinerlei Auswirkungen hat.
Das ganze dient dazu mir einige Logfiles aus zu lesen und mir das ausgelesene als Mail zu schicken. Cron soll das ganze automatisch anwerfen. Nun muß man sagen das ich von Shellscripten nicht viel Ahnung habe.
logwatch.daily für cron
#! /bin/sh
rootmail=root@mydomain
if [ -x /usr/local/bin/logwatch ]
then
/usr/local/bin/logwatch | mail -s "taegliche Logwatch Meldung" $rootmail
else
echo "Warnung es ist kein logwatch Script unter /usr/local/bin zu finden" -s "taegliche Logwatch Meldung" $rootmail
fi
Das eigentliche Skript was ausgeführt werden soll
#! /bin/bash
## Auszüge aus verschiedenen Logfiles per Mail versenden
datum=`date`
rechner=`hostname`
echo
echo
echo "Logfilebericht $datum"
echo " Rechner: $rechner"
echo
echo
echo "===== Begin Festplattenbelegung =========="
echo
echo "`df -h`"
echo
echo "===== Ende Festplattenbelegung =========="
echo
echo
echo
echo
echo "===== Begin ClamAV Update Virendatenbank ="
echo
echo "`cat /var/log/clamav/freshclam.log | grep "\`date -R | awk '{printf("%.3s %s %d\n",$1,$3,$2)}'\`"`"
echo
echo "===== Ende ClamAV Update Virendatenbank =========="
#
####### Beispiele die funktionieren ################
### grep "`date -R | awk '{printf("%.3s %s %d\n",$1,$3,$2)}'`" /var/log/clamav/freshclam.log
### echo "`cat /var/log/clamav/freshclam.log | grep "\`date -R | awk '{printf("%.3s %s %d\n",$1,$3,$2)}'\`"`"
### cat /var/log/clamav/freshclam.log | grep "`date -R | awk '{printf("%.3s %s %d\n",$1,$3,$2)}'`"
### date -R | awk '{printf("%.3s %s %d\n",$1,$3,$2)}'
#
echo
echo
echo
echo
echo "===== Begin Fehlermeldung ClamAV vom aktuellen Datums in /var/log/clamav/clamd.log =========="
echo
echo "`cat /var/log/clamav/clamd.log | grep -i -e error -e warn -e fail`"
#
####### Beispiele die funktionieren ################
### echo "`cat /var/log/clamav/clamd.log | grep "\`date -R | awk '{printf("%.3s %s %d\n",$1,$3,$2)}'\`"`"
#
echo
echo "===== Ende ClamAV Logfile Auszug es aktuellen Datums =========="
echo
echo
echo
echo
echo "===== Begin Fehlermeldungen vom aktuellen Datum in /var/log/everything/ =========="
echo
echo "`cat /var/log/everything/log-\`date -I\`* | grep -i -e fail -e warn -e error`"
echo "`cat /var/log/everything/current | grep -i -e fail -e warn -e error`"
echo
echo "===== Ende Fehlermeldungen vom aktuellen Datum in /var/log/everything/ =========="
echo
echo
echo
echo
echo "===== Begin Fehlermeldungen vom aktuellen Datum in /var/log/mail/ =========="
echo
echo "`cat /var/log/mail/log-\`date -I\`* | grep -i -e fail -e warn -e error`"
echo "`cat /var/log/mail/current | grep -i -e fail -e warn -e error`"
echo
echo "===== Ende Fehlermeldungen vom aktuellen Datum in /var/log/mail/ =========="
Leider hat sich im nachhinein noch ergeben das ich das datum vom Vortag für das freshclam logfile brauche. Also wenn Du da eine colle Idee hast wäre ich Dir sehr dankbar.
Gruß Leon
Moin,
Vielen Dank für Dein schreiben. Wir hatten ja weiter oben festgestellt das das setzen der LC_TIME bei mir, warum auch immer, keinerlei Auswirkungen hat.
Probier mal die von mir gepostete Schreibweise. Es gibt einen wesentlichen Unterschied zwischen den verschiedenen Aufrufmethoden:
jan@jack:~> bash
jan@jack:~> echo $LC_TIME
jan@jack:~> LC_TIME=en_EN.utf8 && date +"%a %b %e"
Di Mär 11
jan@jack:~> echo $LC_TIME
en_EN.utf8
jan@jack:~> date +"%a %b %e"
Di Mär 11
jan@jack:~> LC_TIME=en_EN.utf8 date +"%a %b %e"
Tue Mar 11
jan@jack:~> exit
jan@jack:~> bash
jan@jack:~> echo $LC_TIME
jan@jack:~> LC_TIME=en_EN.utf8 date +"%a %b %e"
Tue Mar 11
jan@jack:~> LC_TIME=en_EN.utf8 && date +"%a %b %e"
Di Mär 11
jan@jack:~> export LC_TIME=en_EN.utf8 && date +"%a %b %e"
Tue Mar 11
Der wesentliche Unterschied liegt darin, dass die vorher geposteten Varianten die Variable nicht exportieren. Damit stehen sie in geforkten Prozessen nicht zur Verfügung. Die von mir genutzte Variante führt aber das date-Kommando zusammen mit der Zuweisung von LC_TIME aus, nicht als getrennte Befehle. Die letzte Variante exportiert und damit steht das LC_TIME dem date auch zur Verfügung.
Zu Deinem Script: Nein, Du brauchst den echo wirklich nicht.
Warum nicht einfach:
#! /bin/bash
## Auszüge aus verschiedenen Logfiles per Mail versenden
datum=`date`
rechner=`hostname`
echo
echo
echo "Logfilebericht $datum"
echo " Rechner: $rechner"
echo
echo
echo "===== Begin Festplattenbelegung =========="
echo
df -h
echo
echo "===== Ende Festplattenbelegung =========="
echo
echo
echo
echo
echo "===== Begin ClamAV Update Virendatenbank ="
echo
LC_TIME=en_EN.utf8 grep "`date +\"%a %b %e\"`" /var/log/clamav/freshclam.log
echo
echo "===== Ende ClamAV Update Virendatenbank =========="
...
???
Wobei ich folgende Schreibweise noch übersichtlicher finde (ein Argument für echo kann sich durchaus über mehrere Zeilen erstrecken):
#! /bin/bash
## Auszüge aus verschiedenen Logfiles per Mail versenden
datum=`date`
rechner=`hostname`
echo "
Logfilebericht $datum
Rechner: $rechner
===== Begin Festplattenbelegung ==========
"
df -h
echo "
===== Ende Festplattenbelegung ==========
===== Begin ClamAV Update Virendatenbank =
"
LC_TIME=en_EN.utf8 grep "`date +\"%a %b %e\"`" /var/log/clamav/freshclam.log
echo "
===== Ende ClamAV Update Virendatenbank ==========
"
...
Datum von gestern geht z. B. so:
jan@jack:~> LC_TIME=en_EN.utf8 date -d yesterday +"%a %b %e"
Mon Mar 10
Jan
EDIT: Ich bin auf den Rest Deines Scripts nicht eingegangen, aber auch hier kannst Du den echo an allen Stellen rausnehmen (und kriegst dadurch ein IMHO deutlich übersichtlicheres und ressourcenschonenderes Script), wo Du Befehlsausgaben ausgeben willst. Die Konstruktion echo "`irgend_ein_befehl`" macht nämlich nur eins: Sie fängt die Standardausgabe von irgend_ein_befehl, um sie dann auf der Standardausgabe auszugeben. Das ist doppelt gemoppelt. "`irgend_ein_befehl`" macht nur dann Sinn, wenn Du die Ausgabe des Befehls z. B. an eine Variable zuweisen willst, um sie danach weiterzuverwenden oder sie wie oben als Argument für ein anderes Kommando verwenden willst.
Hi
Danke für Deine Hilfe.
Also folgendes habe ich gemacht
jan@jack:~> bash
jan@jack:~> echo $LC_TIME
jan@jack:~> LC_TIME=en_EN.utf8 && date +"%a %b %e"
Di Mär 11
jan@jack:~> echo $LC_TIME
en_EN.utf8
jan@jack:~> date +"%a %b %e"
Di Mär 11
jan@jack:~> LC_TIME=en_EN.utf8 date +"%a %b %e"
Tue Mar 11
Und hier hackt es schon. Ich bekomme nicht wie Du die englische sondern die deutsche Ausgabe.
server tmp # LC_TIME=en_EN.utf8 date -d yesterday +"%a %b %e"
Mo Mär 10
server tmp # bash
server tmp # echo $LC_TIME
server tmp # LC_TIME=en_EN.utf8 && date +"%a %b %e"
Di Mär 11
server tmp # echo $LC_TIME
en_EN.utf8
server tmp # date +"%a %b %e"
Di Mär 11
server tmp # LC_TIME=en_EN.utf8 date +"%a %b %e"
Di Mär 11
server tmp #
Und hier der Rest des Grauens :-)
server tmp # exit
exit
server tmp # bash
server tmp # echo $LC_TIME
server tmp # LC_TIME=en_EN.utf8 date +"%a %b %e"
Di Mär 11
server tmp # LC_TIME=en_EN.utf8 && date +"%a %b %e"
Di Mär 11
server tmp # export LC_TIME=en_EN.utf8 && date +"%a %b %e"
Di Mär 11
server tmp #
Aber egal. Ich schreibe jetzt erstmal den Rest sauber und dann schauen wir mal in Ruhe.
Könntest Du mir bitte diese Zeile ohne echo geben
echo "`grep \"\`date -R | awk '{printf(\\\"%.3s %s %2d\n\\\",$1,$3,$2)}'\`\" /var/log/clamav/freshclam.log`"
Vielen Dank
Leon
Moin,
...
server tmp # LC_TIME=en_EN.utf8 date -d yesterday +"%a %b %e"
Mo Mär 10
server tmp # bash
server tmp # echo $LC_TIME
...
server tmp # LC_TIME=en_EN.utf8 date +"%a %b %e"
Di Mär 11
server tmp #
Aber egal. Ich schreibe jetzt erstmal den Rest sauber und dann schauen wir mal in Ruhe.
Ha - ist mir gar nicht egal ;-) Und ich glaube, ich weiss jetzt auch, wo der Hase im Pfeffer begraben liegt! Ich habe mir Deine vorigen Postings nochmal durchgeguckt und die Liste Deiner Umgebungsvariablen entdeckt. Auf Deinem System sind ja alle LC_*-Variablen gesetzt, und da ist eine ganz fiese dabei: LC_ALL übersteuert alle anderen LC_*-Settings. Dann habe ich das bei mir nachgezogen (da ist per Default nur LANG gesetzt) und siehe da:
jan@jack:~> export LC_ALL=de_DE.utf8
jan@jack:~> LC_TIME=en_EN.utf8 date -d yesterday +"%a %b %e"
Mo Mär 10
jan@jack:~> LC_ALL=en_EN.utf8 date -d yesterday +"%a %b %e"
Mon Mar 10
Könntest Du mir bitte diese Zeile ohne echo geben
echo "`grep \"\`date -R | awk '{printf(\\\"%.3s %s %2d\n\\\",$1,$3,$2)}'\`\" /var/log/clamav/freshclam.log`"
Versuchs erstmal mit der obigen Variante, ansonsten:
grep "`date -R | awk '{printf(\"%.3s %s %2d\n\",$1,$3,$2)}'`" /var/log/clamav/freshclam.log
Jan
Hi Jan61
Ich denke das es so wie Du es geschrieben hast funktionieren wird. Leider kann ich wegen Zeitmangel erst am WE wieder testen.
Kann ich das mit der LC_LANG denn dann auch in mein Skript einbauen?
Ich dachte mir das so
#!/bin/bash
/bin/bash
LC_ALL=en_EN.utf8
.
.
.
.
.
.
.
.
.
.
exit
Ich will nicht das das setzen der LC meine Umgebungsvariablen vom Server komplett verhunzen.
Hi
Ok es geht soweit alles. In meinem Skript muß ich nur den bash Befehl weg lassen.
Aber jetzt habe ich hoffentlich nur noch eine einzige Frage :-)
Wie mache ich das richtig
cat /var/log/everything/log-`date -d yesterday -I`* | grep date -d yesterday +"%a %b %e"` -i -e fail -e warn -e error
Vielen Dank für Deine Mühe
So habe es jetzt hin bekommen. Habe es etwas anders gemacht wie gedacht, aber es geht super
#! /bin/bash
## Auszüge aus verschiedenen Logfiles per Mail versenden
# Umgebungsvariable setzen
LC_ALL=en_EN.utf8
datum=`date`
rechner=`hostname`
echo "
Logfilebericht $datum
Rechner: $rechner
========== Begin Festplattenbelegung ==========
"
df -h
echo "
========== Ende Festplattenbelegung ==========
========== Begin ClamAV Update Virendatenbank ==========
"
grep "`date -d yesterday +"%a %b %e"`" /var/log/clamav/freshclam.log
echo "
========== Ende ClamAV Update Virendatenbank ==========
========== Begin Fehlermeldung ClamAV von gestern in /var/log/clamav/clamd.log ==========
"
grep "`date -d yesterday +"%a %b %e"`" /var/log/clamav/clamd.log | grep -i -e error -e warn -e fail
echo "
===== Ende ClamAV Logfile Auszug von gestern ==========
===== Begin Fehlermeldungen von gestern in /var/log/everything/ ==========
"
cat /var/log/everything/log-`date -I`* | grep "`date -d yesterday +"%b %e"`" | grep -i -e fail -e warn -e error
grep "`date -d yesterday +"%a %b %e"`" /var/log/everything/current | grep -i -e error -e warn -e fail
echo "
===== Ende Fehlermeldungen von gestern in /var/log/everything/ ==========
===== Begin Fehlermeldungen von gestern in /var/log/mail/ ==========
"
cat /var/log/mail/log-`date -I`* | grep "`date -d yesterday +"%b %e"`" | grep -i -e fail -e warn -e error
grep "`date -d yesterday +"%a %b %e"`" /var/log/mail/current | grep -i -e error -e warn -e fail
echo "
===== Ende Fehlermeldungen von gestern in /var/log/mail/ ==========
Danke für Deine Hilfe.
Bin auch weiterhin für jeden Tip dankbar
Gruß Leon
Moin,
...Kann ich das mit der LC_LANG denn dann auch in mein Skript einbauen?
...Ich will nicht das das setzen der LC meine Umgebungsvariablen vom Server komplett verhunzen.
Innerhalb eines Scripts kannst Du problemlos Umgebungsvariablen setzen, das Script wird ja sowieso in einer Subshell ausgeführt, die Variablendefinitionen hier haben keine Auswirkung auf die startende Shell oder gar systemweite Einstellungen. Für Letzteres müsstest Du schon globale Konfig-Dateien wie /etc/profile anfassen. In meinen Beispielen habe ich nur deshalb immer wieder eine Subshell aufgemacht, damit ich verschiedene Einstellungen testen konnte und dann mit dem Verlassen dieser Shell wieder die normale Umgebung habe. Wie gesagt - in einem Script passiert das automatisch - es sei denn, Du "sourcest" es (". /pfad/zum/script" oder "source /pfad/zum/script"), dann wird es in der aktuellen Shell ausgeführt. Dann wirken Umgebungseinstellungen aber auch nur in der aktuellen Shell, nie darüber hinaus.
Jan
Moin,
...
LC_ALL=en_EN.utf8
...
grep "`date -d yesterday +"%a %b %e"`" /var/log/clamav/freshclam.log
Das funktioniert aber nur in Deiner konkreten Umgebung, weil hier LC_ALL bereits bekannt und exportiert ist. Wenn die Variable nicht gesetzt ist, dann fehlt wieder ein "export LC_ALL=en_EN.utf8":
jan@jack:~/tmp> bash
jan@jack:~/tmp> echo $LC_ALL
jan@jack:~/tmp> date +"%a %b %e"
Sa Mär 15
jan@jack:~/tmp> LC_ALL=en_EN.utf_8
jan@jack:~/tmp> date +"%a %b %e"
Sa Mär 15
jan@jack:~/tmp> export LC_ALL=en_EN.utf_8
jan@jack:~/tmp> date +"%a %b %e"
Sat Mar 15
jan@jack:~/tmp> exit
jan@jack:~/tmp> bash
jan@jack:~/tmp> export LC_ALL=en_EN.utf_8
jan@jack:~/tmp> date +"%a %b %e"
Sat Mar 15
jan@jack:~/tmp> LC_ALL=de_DE.utf8
jan@jack:~/tmp> date +"%a %b %e"
Sa Mär 15
Siehst Du den Unterschied? Wenn LC_ALL einmal exportiert ist, dann kannst Du die Werte ohne erneute export-Anweisung ändern, sie sind dann auch in geforkten Kind-Prozessen bekannt. Ist die Variable aber im Environment nicht vorhanden, dann nutzt ein Setzen ohne export nichts, weil die Variable für die Kindprozesse (wie date) nicht bekannt ist.
Der saubere Weg ist also, sie im Script immer mit "export LC_ALL=en_EN.utf_8" zu deklarieren. Auf die aufrufende Shell hat das (siehe mein voriges Posting) keinen Einfluss, der export wirkt sich immer nur "nach unten" aus und ist mit dem Ende des Scripts auch wieder vergessen.
Jan
hallo jan
Vielen Dank für die super Tips. Habe jetzt alles so umsetzen können das es wunderbar funktioniert und ich es bei bedarf noch ausbauen kann.
Wünsche noch einen schönen Sonntag
Gruß Leon
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.