D
Deleted member 706912
Guest
Hallo zusammen!
Wer zu den eher vorsichtigen Typen gehört und pauschal alle EMMs blockt statt EMMs bestimmter Längen wird das Problem kennen: Man muss immer mal wieder schauen ob EMMs gekommen sind, die geschrieben werden müssen. Blöd ist dann auch noch, dass oft immer wieder die gleichen EMMs kommen.
Habe daher mal ein kleines Shell Script gebastelt, welches die Oscam EMM Logdatei ausliest und mit einer separaten Datei vergleicht, in der alle EMMs "unique" abgelegt werden:
Wird ein neues EMM identifiziert, wird ein Mail versendet. Voraussetzung ist die Installation und Konfiguration von nail. Es wird sowohl ein tail -f als auch cat Modus unterstützt. Tail -f benutze ich persönlich nicht so oft, es sei denn zum Testen, denn dann kommt natürlich für jedes EMM ein Mail. Mit cat kann man es besser als Cronjob einplanen und bekommt dann ein Sammelmail.
Have fun!
Wer zu den eher vorsichtigen Typen gehört und pauschal alle EMMs blockt statt EMMs bestimmter Längen wird das Problem kennen: Man muss immer mal wieder schauen ob EMMs gekommen sind, die geschrieben werden müssen. Blöd ist dann auch noch, dass oft immer wieder die gleichen EMMs kommen.
Habe daher mal ein kleines Shell Script gebastelt, welches die Oscam EMM Logdatei ausliest und mit einer separaten Datei vergleicht, in der alle EMMs "unique" abgelegt werden:
#!/bin/sh
#Globale Konstanten - ggf. anpassen
# Mail Betreff bei neuen EMMs
C_SUBJ="Oscam: Neue EMMs empfangen"
#Mail Text bei neuen EMMs
C_TEXT="Es wurden neue EMMs empfangen! Bitte prüfen."
# Mail Betreff wenn keine EMMs gefunden wurden
C_SUBJ_NO="Oscam: Keine neuen EMMs"
# Mail Text wenn keine EMMs gefunden wurden
C_TEXT_NO="Keine neuen EMMs empfangen."
# Pfad zur Tempdatei die während der Verarbeitung erzeugt und wieder gelöscht wird
C_TMPFILE=/tmp/emm.tmp
### SUBROUTINES ###
#Syntaxausgabe
syntax () {
echo "Syntax: "`basename $0` "[OPTIONS] LOGFILE EMMLIST REC"
echo ""
echo "LOGFILE: Pfad zu einem EMM Logfile, welches durch Oscam produziert wurde"
echo "EMMLIST: Pfad zu einer Datei, die die empfangenen EMMs verwaltet."
echo " Wenn diese Datei nicht existiert, wird sie erstellt."
echo "REC: Empfaenger Mail Adresse"
echo ""
echo "OPTIONS:"
echo " -t Tail -f Modus verwenden (laufende Aenderungsueberwachung)"
echo " -p LOGFILE nach Ausfuehrung vollstaendig leeren."
echo " Darf nicht mit -t verwendet werden!"
echo " -n E-Mail auch versenden wenn kein neues EMM gefunden wurde"
echo " Darf nicht mit -t verwendet werden!"
echo " -e EMM in Email anzeigen"
echo
echo " --help Diese Hilfe anzeigen"
}
#Hauptloop durch die Datei
loopfile () {
while IFS='' read line; do
v_curremm=`echo $line | sed -n 's/.*\(8270[^ ]*\).*/\1/p'`
#prüfen ob EMM noch nicht im Log steht
if [ -n $v_curremm ] && [ "${v_curremm}" != "" ] && ! grep -q $v_curremm "$v_emmlist"
then
#EMM ins log schreiben und ausgeben
v_emmfound=1
echo $line >> $C_TMPFILE
echo $line >> $v_emmlist
echo $v_curremm
echo ""
#für tail hier die Mail schreiben, da jedes einzelne EMM versendet wird
if [ $p_tail -eq 1 ]
then
mailemm
#tmpfile hier clearen, damit nicht beim nächsten Mail Versand dieses EMM erneut geschickt wird
echo -n > $C_TMPFILE
fi
fi
done
#Mailversand nur bei cat Modus am Schluss (tail wird hier nie ankommen)
if [ $p_tail -eq 0 ]
then
mailemm
fi
}
#Mailversand
mailemm () {
if [ $v_emmfound -eq 0 ]
then
echo "Keine neuen EMMs gefunden."
if [ $p_mail_no_change -eq 1 ]
then
echo $C_TEXT_NO | nail -s "$C_SUBJ_NO" $v_rec
fi
else
(
echo $C_TEXT
echo
if [ $p_emm_mail -eq 1 ]
then
cat $C_TMPFILE | while IFS='' read line; do
echo $line
done
fi
) | nail -s "$C_SUBJ" $v_rec
fi
}
### MAIN PROCESSING ###
#durch alle Parameter loopen
p_purge=0
p_mail_no_change=0
p_emm_mail=0
p_tail=0
while [ $# -gt 1 ] && [ "${1:0:1}" = "-" ]
do
case $1 in
"-p")
p_purge=1
;;
"-n")
p_mail_no_change=1
;;
"-e")
p_emm_mail=1
;;
"-t")
p_tail=1
;;
"--help")
syntax
return
;;
*)
echo
echo "Fehler: Unbekannter Parameter $1!"
echo
syntax
return
esac
shift
done
if [ $# -lt 3 ]
then
syntax
return
fi
if [ $p_tail -eq 1 ] && [ $p_purge -eq 1 ]
then
echo
echo "Fehler: -p darf nicht gemeinsam mit -t verwendet werden!"
echo
syntax
return
fi
if [ $p_tail -eq 1 ] && [ $p_mail_no_change -eq 1 ]
then
echo
echo "Fehler: -n darf nicht gemeinsam mit -t verwendet werden!"
echo
syntax
return
fi
if ! [ -f $1 ]
then
echo
echo "Datei \"$1\" nicht gefunden!"
echo
syntax
return
fi
#Name fuer EMM Loglist
v_logfile=$1
v_emmlist=$2
v_rec=$3
#Variable fuer aktuell gelesenes EMM aus Log
v_curremm=
#Flag ob neues EMM gefunden wurde
v_emmfound=0
#EMM Loglist anlegen falls nicht vorhanden
if [ ! -e $v_emmlist ]
then
touch $v_emmlist
fi
#Wahlweise je nach Kommandozeilenparameter durch die Datei mit cat oder tail loopen
if [ $p_tail -eq 1 ]
then
tail -f $v_logfile | loopfile
else
cat $v_logfile | loopfile
fi
touch $C_TMPFILE
#logfile loeschen wenn angegeben
if [ $p_purge -eq 1 ]
then
echo -n > $v_logfile
fi
#Tempfile loeschen
rm $C_TMPFILE
#Globale Konstanten - ggf. anpassen
# Mail Betreff bei neuen EMMs
C_SUBJ="Oscam: Neue EMMs empfangen"
#Mail Text bei neuen EMMs
C_TEXT="Es wurden neue EMMs empfangen! Bitte prüfen."
# Mail Betreff wenn keine EMMs gefunden wurden
C_SUBJ_NO="Oscam: Keine neuen EMMs"
# Mail Text wenn keine EMMs gefunden wurden
C_TEXT_NO="Keine neuen EMMs empfangen."
# Pfad zur Tempdatei die während der Verarbeitung erzeugt und wieder gelöscht wird
C_TMPFILE=/tmp/emm.tmp
### SUBROUTINES ###
#Syntaxausgabe
syntax () {
echo "Syntax: "`basename $0` "[OPTIONS] LOGFILE EMMLIST REC"
echo ""
echo "LOGFILE: Pfad zu einem EMM Logfile, welches durch Oscam produziert wurde"
echo "EMMLIST: Pfad zu einer Datei, die die empfangenen EMMs verwaltet."
echo " Wenn diese Datei nicht existiert, wird sie erstellt."
echo "REC: Empfaenger Mail Adresse"
echo ""
echo "OPTIONS:"
echo " -t Tail -f Modus verwenden (laufende Aenderungsueberwachung)"
echo " -p LOGFILE nach Ausfuehrung vollstaendig leeren."
echo " Darf nicht mit -t verwendet werden!"
echo " -n E-Mail auch versenden wenn kein neues EMM gefunden wurde"
echo " Darf nicht mit -t verwendet werden!"
echo " -e EMM in Email anzeigen"
echo
echo " --help Diese Hilfe anzeigen"
}
#Hauptloop durch die Datei
loopfile () {
while IFS='' read line; do
v_curremm=`echo $line | sed -n 's/.*\(8270[^ ]*\).*/\1/p'`
#prüfen ob EMM noch nicht im Log steht
if [ -n $v_curremm ] && [ "${v_curremm}" != "" ] && ! grep -q $v_curremm "$v_emmlist"
then
#EMM ins log schreiben und ausgeben
v_emmfound=1
echo $line >> $C_TMPFILE
echo $line >> $v_emmlist
echo $v_curremm
echo ""
#für tail hier die Mail schreiben, da jedes einzelne EMM versendet wird
if [ $p_tail -eq 1 ]
then
mailemm
#tmpfile hier clearen, damit nicht beim nächsten Mail Versand dieses EMM erneut geschickt wird
echo -n > $C_TMPFILE
fi
fi
done
#Mailversand nur bei cat Modus am Schluss (tail wird hier nie ankommen)
if [ $p_tail -eq 0 ]
then
mailemm
fi
}
#Mailversand
mailemm () {
if [ $v_emmfound -eq 0 ]
then
echo "Keine neuen EMMs gefunden."
if [ $p_mail_no_change -eq 1 ]
then
echo $C_TEXT_NO | nail -s "$C_SUBJ_NO" $v_rec
fi
else
(
echo $C_TEXT
echo
if [ $p_emm_mail -eq 1 ]
then
cat $C_TMPFILE | while IFS='' read line; do
echo $line
done
fi
) | nail -s "$C_SUBJ" $v_rec
fi
}
### MAIN PROCESSING ###
#durch alle Parameter loopen
p_purge=0
p_mail_no_change=0
p_emm_mail=0
p_tail=0
while [ $# -gt 1 ] && [ "${1:0:1}" = "-" ]
do
case $1 in
"-p")
p_purge=1
;;
"-n")
p_mail_no_change=1
;;
"-e")
p_emm_mail=1
;;
"-t")
p_tail=1
;;
"--help")
syntax
return
;;
*)
echo
echo "Fehler: Unbekannter Parameter $1!"
echo
syntax
return
esac
shift
done
if [ $# -lt 3 ]
then
syntax
return
fi
if [ $p_tail -eq 1 ] && [ $p_purge -eq 1 ]
then
echo
echo "Fehler: -p darf nicht gemeinsam mit -t verwendet werden!"
echo
syntax
return
fi
if [ $p_tail -eq 1 ] && [ $p_mail_no_change -eq 1 ]
then
echo
echo "Fehler: -n darf nicht gemeinsam mit -t verwendet werden!"
echo
syntax
return
fi
if ! [ -f $1 ]
then
echo
echo "Datei \"$1\" nicht gefunden!"
echo
syntax
return
fi
#Name fuer EMM Loglist
v_logfile=$1
v_emmlist=$2
v_rec=$3
#Variable fuer aktuell gelesenes EMM aus Log
v_curremm=
#Flag ob neues EMM gefunden wurde
v_emmfound=0
#EMM Loglist anlegen falls nicht vorhanden
if [ ! -e $v_emmlist ]
then
touch $v_emmlist
fi
#Wahlweise je nach Kommandozeilenparameter durch die Datei mit cat oder tail loopen
if [ $p_tail -eq 1 ]
then
tail -f $v_logfile | loopfile
else
cat $v_logfile | loopfile
fi
touch $C_TMPFILE
#logfile loeschen wenn angegeben
if [ $p_purge -eq 1 ]
then
echo -n > $v_logfile
fi
#Tempfile loeschen
rm $C_TMPFILE
Wird ein neues EMM identifiziert, wird ein Mail versendet. Voraussetzung ist die Installation und Konfiguration von nail. Es wird sowohl ein tail -f als auch cat Modus unterstützt. Tail -f benutze ich persönlich nicht so oft, es sei denn zum Testen, denn dann kommt natürlich für jedes EMM ein Mail. Mit cat kann man es besser als Cronjob einplanen und bekommt dann ein Sammelmail.
Have fun!