Aktuelle Einträge

TheStarter
Hallo,

mit cronjob lasse ich mein Shellskript jeden Tag z.B. um 10 Uhr starten.
Im Skript versuche ich mit einem grep-kombinations-befehl alle aktuellen Einträge einer Logdatei ausfiltern. D.h. alle Einträge von 10 Uhr des letzten tages bis das Skript durch den Cronjob gestartet wird, also bis 10 Uhr heute.
Ich speichere das gestern-Datum1(date -d"1 day ago" sowie das heute-Datum2 in Variablen. dann mit grep im Bereich [Datum1-Datum2] selektiere ich die Einträge. Es funkz leider nicht. Bitte irgendeine Idee, wie ich die Einträge der letzten 24 Std. selektieren kann?
linuxerr
was bedeutet "funkz nicht"?
bischen genauer wäre hilfreich. poste das script.

hast du für die externen shellkommandos die kompletten pfade eingetragen? cronjobs werden in einer nicht-interaktiven shell ausgeführt, da sieht das environment anders aus.
siehe man crond
TheStarter
funkz nicht = funktioniert nicht
das mit dem cronjob habe ich noch nicht. Erstmal will ich mein skript zum laufen bringen. So sieht das Skript aus:

#!/bin/ksh


########### Deklaration von Variablen

OracleFile=~/test/oracle.txt #path of outputfile
#
OraLogPath=/opt/oracle/product/10g/network/log/listener.log #name & path of the Logfile
#
# mailadressen der Empfänger
mail1=mustermail1@web.de
mail2=mustermail2@t-mobile.de
mail3=mustermail3@gmx.net
#
#Die Suchmuster
datum1= `date -d"1 days ago" +'%d-%m-%y %H:%M:%S'`
datum2= `date +'%d-%m-%y %H:%M:%S'`
content1=`grep "^[${datum1}-${datum2}]" | grep -E '(Error|WARNING)'`
content2=`grep "listening" listener.log | grep "no ports$" listener.log`

##########################################################################

# redirection of searched datas into outputfile
function readLog() {

$1
$2
$3

echo > $2
echo >> $3
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" >> $3
echo " Oracle Logfile " >> $3
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" >> $3
echo -e "$1" >> $3
echo -e "$1" >> $3
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" >> $3
echo -e "$2" >> $2
echo -e "$2" >> $2

}

# send the outputfile via email
function sendMAIL() {
$1

cat $1 | mail -s "Oracle Monitoring" $2 $3 $4

}

readLOG $content1 $content2 $OracleFile
sendMAIL $OracleFile $mail1 $mail2 $mail3

Aber kommt immer die Fehlermeldung :
Line 19: 28-11-2007: command not found
Line 20: 29-11-2007: command not found

und das sind die 2 zeilen datum1 und datum2
TheStarter
Außerdem finde ich im Netz leider NIX dazu, wie ich aus meinem Shellskript eine steuerbare INI-Datei mache. Wie ist der Aufbau solcher Datei und was zu beachten ist?
epikur
hallo TheStarter ...

... bei der zuweisung deiner suchmuster steht ein leerzeichen nach dem =
... deshalb klappt das mit der zuweisung nicht
... und das datum wird als befehl interpretiert

Zitat:
datum1= `date -d"1 days ago" +'%d-%m-%y %H:%M:%S'`
datum2= `date +'%d-%m-%y %H:%M:%S'`


...
TheStarter
Danke für die Antwort.
Das ist mir nachher aufgefallen und ich habe es auch korrigiert. Aber nun werden alle Einträge selektiert.
epikur
... um zu sehen was dein script tut - oder was nicht - setzt du den debug-mode [-x]
... einfach in der ersten zeile anhängen:

#/bin/ksh -x

... oder an der stelle in deinem script aktivieren, an der du den fehler vermutest

set -x



... eine ini-datei liest du so ein, dass sie in der aktuellen shell gelesen wird
... punkt leerzeichen ini-datei

. /deinpfad/monitoring.ini

... letzen endes ist das nur eine auslagerung von funktionsbeschreibung, variablenzuweisung, parametern, flags, hilfetext, etc
... in deiner aufgabenstellung steht, dass du das script über eine solche datei steuern sollst
... also werden dort die vars und flags belegt
... in deinem script überprüfst du diese belegung und regierst entsprechend
...
TheStarter
erstmal Danke für die schnelle Antwort.

1- zu set -x : wo kommt es dann hin? ich habe keinen Fehler, nur die Grepierung nach den aktuellen Einträgen geht irgendwie nicht!!

2- Zu .ini: heißt das einfach statt monitor.sh als monitor.ini speichern?

3- Soll der Aufbau der ini-datei so aussehen:

[Oracle-Listener]
Pars1="-E '(Error|Warnning)'"
Pars2="XXXX"
FileName="/appl/local/oracle/network/log/listener.log"
DirOutput="/appl/tools/monitoring/log"
FileOutput="monitor.log"
[Oracle-Log]
Pars1="-E '(Error|;E)'"
Pars2="XXXX"
FileName="/appl/local/oracle/network/log/xxx.log"
DirOutput="/appl/tools/monitoring/log"
FileOutput="monitor.log"
[MySql-Log]
Pars1="-E '(Error|;YYY)'"
Pars2="XXXX"
FileName="/opt/local/mysql/mysql.log"
DirOutput="/appl/tools/monitoring/log"
FileOutput="monitor.log"

und danach die funktion schreiben?