Aktuelles
Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

OScam Reader "überwachen"

    Nobody is reading this thread right now.
hallo Leute ich wollte auch gern mein reader überwachen lassen aber irgend wie klappt das nicht.

so ich hab ein debian mit ipc server und oscam die reader wurden per UDEV zugeordnet habe 4 karten

ich habe beide scripts ausprobiert aber beide bekomme ich nur fehlermeldungen.

so meine schrite vom ersten beitrag

root@Igel /home/Richie > touch /var/emu/script/oscam-checkreader.sh
root@Igel /home/Richie > nano /var/emu/script/oscam-checkreader.sh
root@Igel /home/Richie > chmod 755 /var/emu/script/oscam-checkreader.sh
root@Igel /home/Richie > sh /var/emu/script/oscam-checkreader.sh

dann kam die fehlermeldung

/var/emu/script/oscam-checkreader.sh: 12: CARD[1]=mille: not found
/var/emu/script/oscam-checkreader.sh: 13: CARD[2]=sky: not found
/var/emu/script/oscam-checkreader.sh: 14: CARD[3]=sky2: not found
/var/emu/script/oscam-checkreader.sh: 15: CARD[4]=skdhd: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: [[: not found
/var/emu/script/oscam-checkreader.sh: 80: Bad substitution
/var/emu/script/oscam-checkreader.sh: 80: ERROR: WebIf isnt enabled! Abort!: not found
/var/emu/script/oscam-checkreader.sh: 80: Bad substitution
/var/emu/script/oscam-checkreader.sh: 90: Bad substitution

leider weiß ich nicht warum könnte mir jemand helfen wehre dankbar


MFG

hallo kann mir leider keiner helfen oder nur ein Tipp geben DANKE
 
Zuletzt bearbeitet von einem Moderator:
AW: OScam Reader "überwachen"

Eines vorweg, ich kenne mich mit den beiden Scripts nicht aus - daher werde ich dir keine große Hilfe sein können.

So wie ich den Thread lese ist zumindest eines klar, daß der Aufruf mit nur:
"sh /var/emu/script/oscam-checkreader.sh" (ohne weitere Parameter) nicht funktioniert/funktionieren kann.
Siehe dazu post #10 bzw. post #14.
Wenn man aufmerksam liest, sollte man zum Ziele kommen.




Gruß Superhansi
 
AW: OScam Reader "überwachen"

Guten Abend zusammen,
ich bin momentan am überlegen ein eigenes script zu schreiben, weiß allerdings nicht genau wie ich es am besten umsetze bzw. es wäre das erste und würde mir gerne etwas helfen lassen =)

Ist im Grunde eine recht einfache überwachung, die folgendes erfüllen soll:

- Beim upstart sollte oscam erst nach 20-30 sekunden gestartet werden

- Alle 2 Sekunden prüfen ob der Prozess "oscam" läuft.. falls nicht, starten. (teilweise sind es mehrere dienste mit namen "oscam", sprich mehrere PIDs - anscheint startet jeder stream der aufgebaut wird einen weiteren "oscam"-prozess, sodass wenn ich oscam starte und zusätzlich einen client verbinde 2 PIDs mit oscam -b im system wiederfinde. -> wollte das nur mal eben erwähnt haben, eventuell ist es ja normal. (nutze Yavdr (Headless) mit xvdr und openelec htpcs)

- Da ich ab und an Probleme habe das sich die Karte "verabschiedet" aber oscam selbst weiterläuft habe ich mir überlegt den inhalt der log-datei auch alle 2 Sekunden zu überwachen (zb. sollten die Antwortzeiten mehr als 500ms betragen -> killall oscam -> oscam -b)

--- falls möglich:
Eine Nachricht via svdrp an alle clients, wenn der vdr rebootet "VDR wird aktuallisiert und startet neu - Bin gleich wieder da!"
und eine Nachricht beim start (wenn oscam aktiv) "So, da bin ich wieder. Sender bitte stoppen und erneut schalten."


Eventuell hat ja jemand noch andere ideen zur Anwendung um nicht immer bescheid sagen zu müssen - vielleicht ja ein abstimm-system in dem die clients entscheiden ob neugestartet werden kann oder nicht... und falls jemand nach 30 sekunden nicht entschieden hat, es mit "Ja" deklariert wird - kann nicht genau sagen wo da die Grenzen liegen..


gruß, c4lig0
 
AW: OScam Reader "überwachen"

Installier dir IPC.. Der bringt alle Skripte die du haben möchtest mit.

Gruß
 
AW: OScam Reader "überwachen"

Die Antwort ist leider nicht ganz richtig.
IPC überwacht Oscam nur einmal pro Minute über Cronjob.
Die Reader oder die ECMs überwacht IPC garnicht.

Es stellt sich die Frage ob alle 2 Sekunden sinnvoll ist mein Skript macht es alle 30 Sekunden.

Die Oscam bei 500ms ECMs neu starten zu lassen halte ich auch für fragwürdig.
Nur wegen 500ms muss der Server doch noch keinen Fehler habe, z.B. viele Clients auf einer V13 machen schnell mal 400-500ms das ist normal und unproblematisch.

Ich würde den Status der Karte abfragen CARDOK, oder das Log nach Fehlern durchsuchen lassen. Wie die Script oben in diesem Beitrag.

Alles in allem sollte die Konfiguration ab so gut sein das es das eigentlich nicht braucht. Mir ist z.B. Bis jetzt weder die Oscam noch ein Reader abgeschmiert.
Besser du richtest dir einen VPN ein um auf den Server auch von außen z.B. im Urlaub zugreifen zu können.

Kann dir gerne das Skript zur Verfügung stellen wenn ich wieder zu Hause bin.

Gesendet von meinem iPad mit Tapatalk HD
 
Zuletzt bearbeitet von einem Moderator:
AW: OScam Reader "überwachen"

Ich wollte heute das Icinga/Nagios Script in Betrieb nehmen und da ist mir aufgefallen, das drei kleine Fehler vorhanden sind.


In jeder Zeile, wo die zwei htmls nach nem String durchsucht werden, sind öfters zwei Leerzeichen drinnen, die aber nur eins sein sollten.


Also hier

Z. 135:

Original
b=$(grep '<TD class="statuscol16">CARDOK <A HREF="entitlements.html?label='${!readerNameComp}'&hideexpired=1"' "$temp"/status.html)

Richtig
b=$(grep '<TD class="statuscol16">CARDOK <A HREF="entitlements.html?label='${!readerNameComp}'&hideexpired=1"' "$temp"/status.html)


Z. 340:

Original
b=$(grep '<A HREF="entitlements.html?label='${!readerNameComp}'&hideexpired=1" class="tooltip">('${!entNameComp}' '$entitleCount')<SPAN>' "$temp"/status.html)

Richtig
b=$(grep '<A HREF="entitlements.html?label='${!readerNameComp}'&hideexpired=1" class="tooltip">('${!entNameComp}' '$entitleCount')<SPAN>' "$temp"/status.html)


mfg

cynt4k
 
AW: OScam Reader "überwachen"

Hat hier jemand noch Interesse dran? Das ist bei mir bei mehreren Stellen gebrochen, ich könnte mal eine funktionierende Version auf pastebin werfen.
 
AW: OScam Reader "überwachen"

Ich hätte auch echt Interesse, da das Script 2 aus Post #1 ja scheinbar nicht mehr funktioniert.
Lg

Edit:
Habe die zwei Codezeilen nun selbst angepasst. Läuft bei mir (r9602)
Reader Restart funktioniert auch.

Code:
#!/bin/bash
# Oscam Watchdog & Nagios Script
# -------------------------------
# you can share the script where and as much as you want
# but leave the copyright & contact header untouched!
# if you modify the script you can place your name below
# -------------------------------
# Requires: curl (apt-get install curl)
# wget is not supported cause a failure with authentication encryption
# -------------------------------
# Changelog:
# 15.10.12 - Checken von Entitlements hinzugefügt. Bug im ReaderRestart behoben.
# 15.10.12 - Commandline Howto angepasst. Version auf 0.4 erhöht.
# 28.03.14 - Angepasst für OScam 1.20-unstable_svn r9602. Version auf 0.5 erhöht.
#
# -------------------------------
filename="check_oscam"
version="0.5"
# Start
# Konfiguration:
#


# Wert welcher per Commandozeile übergeben werden muss, damit der automatische Restart des Readers erfolgt.
codeRestart="autorestart"


# Anzahl wie oft hintereinander der Reader neugestartet wird bevor abgebrochen wird (falls es danach nicht OK ist)
anticount="3"


# Log 2 Syslog
# "1" Aktiviert
# "0" Deaktiviert
logsyslog="0"


# Debug
# "1" Aktiviert
# "0" Deaktiviert
debug="0"


# Temporärer Pfad
# für html Seiten & Antiloop Dateien
# OHNE abschließendem Slash (/) am Ende
temp="/tmp"
# Der User welcher das Skript ausführt muss Besitzer der Dateien (status.html) und (readers.html) sein.
# (Wenn man das Skript zum Testen mit root ausführt, und später den Cron  mit einem anderem User - wird das Skript fehlschlagen, da die Dateien  nicht überschrieben werden können.)


# Ende
# Konfiguration
# -------------------------------
howto='\nWarning: Wrong command line arguments. \n
Usage: ./check_oscam <hostname> <port> <username>  <password> <part> <autorestart> <reader0>  <reader1> ... <reader4> <entitlementsReader0>  <entitlementsReader1> ... <entitlementsReader4>\n


Parts are:  statuscheck, restart, entitlement\n
Example: ./check_oscam 127.0.0.1 1403 admin "password" statuscheck autorestart hdplus 1702
- Checks the Readers with label hdplus and 1702. If Status != CARDOK the reader will be restarted automatic.\n
Example: ./check_oscam 127.0.0.1 1403 admin "password" statuscheck norestart hdplus 1702
- Checks the Readers with label hdplus and 1702. But with no reader restart.\n
Example: ./check_oscam 127.0.0.1 1403 admin "password" entitlement norestart hdplus 1702 "" "" "" "1" "10"
- Refresh the Entitlements & Checks the Count of Entitlements of  reader with label hdplus & 1702 where hdplus should have 1  entitlement and 1702 should have 10 entitlements.
- You can specify a maximum of 5 readers. If you specify not 5 you have  to place a "" for each missing before starting with the count of  entitlements.
- In the Example above 2 readers are specified so there are 3  placeholders ("" "" "") required until starting with the count of  entitlements.
Note: All values are case sensitive!
'
if [ "$#" -lt "6" ]; then
        echo -e "$howto" && exit "3"
fi




# General
strHostname=${1}
strPort=${2}
strUser=${3}
strPass=${4}
strpart=${5}
strRestart=${6}


# Reader
strReader0=${7}
strReader1=${8}
strReader2=${9}
strReader3=${10}
strReader4=${11}


# Entitlements
strEnt0=${12}
strEnt1=${13}
strEnt2=${14}
strEnt3=${15}
strEnt4=${16}


if [ "$strpart" == "entitlement" ] && [ "$strEnt0" == "" ]; then
        echo -e "$howto" && exit "3"
fi




# Debugging
if [ $debug -eq 1 ] ;then echo -e  "Hostname:$strHostname\nPort:$strPort\nUser:$strUser\nPass:******\nPart:$strpart\nRestart:$strRestart\nReader0:$strReader0\nReader1:$strReader1\nReader2:$strReader2\nReader3:$strReader3\nReader4:$strReader4\n---------------------------------\nEntReader0:$strEnt0\nEntReader1:$strEnt1\nEntReader2:$strEnt2\nEntReader3:$strEnt3\nEntReader4:$strEnt4"  ; fi


# Remove old File
rm -f ""$temp"/status.html"




statuscheck() {
    #echo "$strHostname:$strPort"
    rm -f "$temp"/status.html
    # File Download
    a=$(curl --connect-timeout 2 -vu ""$strUser":"$strPass"" --anyauth  -o ""$temp"/status.html" "http://$strHostname:$strPort/status.html"  >/dev/null 2>/dev/null)
    if [ $? -eq 0 ]
    then
    {        lines=$(wc -l ""$temp"/status.html" | awk '{print $1}')


            if [ $lines -lt 2 ]  ;  then
                t=$(tail -n 1 ""$temp"/status.html")
                echo "CRITICAL: " $t
                    # Logging
                        if [ "$logsyslog"  == "1" ] ; then    logger  "$filename $version - CRITICAL: $t"; fi
                        if [ $debug -eq 1 ] ;then echo -e "Fehler -  Status.html hat >2 Zeilen und sieht somit nicht korrekt aus." ; fi


                exit 2;
            else
            {
                # Datei hat mehr als 1 Zeile - also suche nach Karten
                    c=0
                    z=0
                    readerName="strReader"
                    if [ $debug -eq 1 ] ;then echo -e "Beginne Schleife  um nach Readern zu suchen.\nc=$c\nz=$z\nreaderName=$readerName" ; fi
                    while [ $z == 0 ]
                    do
                        {
                            # Zähle ReaderNamen hoch
                            readerNameComp="$readerName$c"
                            if [ $debug -eq 1 ] ;then echo -e  "Readername = readerNameComp=$readerNameComp\nReadernameREAL =  ${!readerNameComp}" ; fi




                            # Suche nach Karte
                            b=$(grep '<TD CLASS="statuscol16">CARDOK<BR><A HREF="entitlements.html?label='${!readerNameComp}'&amp;hideexpired=1"'  "$temp"/status.html)
                            if [ $debug -eq 1 ] ;then echo -e "Suchstring="$b"" ; fi


                            if [ $? -eq 0 ]
                                then
                                        #Grep erfolgreich - aber noch nicht klar ob string gefunden
                                        if [ ! "$b" == "" ]
                                        then
                                            #echo "Karte - OK"
                                            if [ ! "$y" == "NOK" ] ; then  y="OK" ; fi
                                            e=""$e"OK: ${!readerNameComp} - "
                                            if [ $debug -eq 1 ] ;then  echo -e "Sieht gut aus - String wurde gefunden. y=$y\ne=$e" ; fi
                                            # pattern found
                                            # Alles gut - lösche falls vorhanden die Antiloop Datei
                                            rm -f ""$temp"/${!readerNameComp}"
                                        else
                                            # String nicht gefunden, also Karte nicht OK
                                            #echo "Karte - Not OK"
                                            y=("NOK")
                                            e=""$e"CRITICAL: ${!readerNameComp} - "
                                            if [ "$codeRestart"  == "$strRestart" ] ; then readerRestart ${!readerNameComp} ; fi
                                            if [ $debug -eq 1 ] ;then  echo -e "Sieht schlecht aus - String nicht gefunden. (1.  Abfrage)\ny=$y\ne=$e" ; fi
                                        fi
                                else
                                        #echo "Karte - Not OK"
                                        y=("NOK")
                                        e=""$e"CRITICAL: ${!readerNameComp} - "
                                        if [ "$codeRestart"  == "$strRestart" ] ; then readerRestart ${!readerNameComp} ; fi
                                        if [ $debug -eq 1 ] ;then echo  -e "Sieht schlecht aus - String nicht gefunden.(2. Abfrage)\ny=$y\ne=$e"  ; fi
                                fi


                            # Ende If


                            tempCount=$[$c + 1]
                            if [ $debug -eq 1 ] ;then echo -e "Zähle hoch - c=$c & tempCount=$tempCount" ; fi
                            readerNameComp="$readerName$tempCount"
                            if [ $debug -eq 1 ] ;then echo -e "Demnach  ist der nächste Reader: $readerNameComp\nDas sollte  sein:${!readerNameComp}" ; fi


                            if [ "${!readerNameComp}" == "" ]  ;  then
                                z=$[$z + 1]
                                if [ $debug -eq 1 ] ;then echo -e "So  der nächste Reader ist leer also Abbruch der Schleife. z=$z" ; fi
                            else
                                # Zähle Reader hoch
                                c=$[$c + 1]
                                if [ $debug -eq 1 ] ;then echo -e "Ende Schleifendurchlauf. Zähle Reader hoch. c=$c" ; fi
                            fi
                        }
                    done


                    if [ "$y"  == 'OK' ] ; then
                        echo "$e"
                        # Logging
                                if [ "$logsyslog"  == "1" ] ; then    logger  "$filename $version - $e"; fi
                                if [ $debug -eq 1 ] ;then echo -e "Fertig - Y = OK - also Exit 0." ; fi
                        exit 0
                    fi


                    if [ "$y" == "NOK" ] ; then
                        echo "$e"
                        # Logging
                                if [ "$logsyslog"  == "1" ] ; then    logger  "$filename $version - $e"; fi
                                if [ $debug -eq 1 ] ;then echo -e "Fertig - Y = NOK - also Exit 2." ; fi
                        exit 2
                    fi
            }
            fi
    }
    else
        {
        echo "CRITICAL: Could not download status.html (StatusCheck)"
        # Logging
            if [ "$logsyslog"  == "1" ] ; then    logger  "$filename  $version - CRITICAL: Could not download status.html (StatusCheck)"; fi
        exit 2;
        }
    fi
}




readerRestart() {
        if [ $debug -eq 1 ] ;then echo -e "Beginne Restart Funktion - Übergabewert (Readername) ist: $1" ; fi
#        echo "$strHostname:$strPort"
        rm -f ""$temp"/readers.html"
        # Check das Loop nicht Größer X ist - damit die Reader nicht dauernd neu gestartet werden
        r=$(cat "$temp/$1" 2>/dev/null)
        if [ ""$r""  == "" ] ; then r=0 ;if [ $debug -eq 1 ] ;then echo  -e "Temp. Restartdatei existiert noch nicht. r=$r" ; fi;  fi
        if [ "$r"  -ge "$anticount" ]  ; then
                                echo "CRITICAL: Nach $r Versuchen kein Reader restart mehr."
                                    # Logging
                                        if [ "$logsyslog"  == "1" ] ;  then    logger  "$filename $version - CRITICAL: Nach $r Versuchen kein  Reader restart mehr."; fi
                                #        if [ $debug -eq 1 ] ;then echo  -e "$filename $version - CRITICAL: Nach $r Versuchen kein Reader restart  mehr." ; fi
                #    Deaktiviert, da sonst das Skript komplett beendet wird
                #               exit 2;
        else


            # File Download
            if [ $debug -eq 1 ] ;then echo -e "readers.html wird runtergeladen - bzw. befehl disable befehl ausgeführt" ; fi
            g=$(curl --connect-timeout 2 -vu ""$strUser":"$strPass""  --anyauth -o ""$temp"/readers.html"  "http://$strHostname:$strPort/readers.html?label=$1&action=disable"  >/dev/null 2>/dev/null)
            if [ $? -eq 0 ]
            then
                    # Antiloop hochzählen
                    echo $[$r+1] > "$temp/$1"


                    # Zähle Zeilen um Fehler fest zu stellen ( Datei muss <1 Zeile sein )
                    lines=$(wc -l ""$temp"/readers.html" | awk '{print $1}')


                    if [ $lines -lt 2 ]  ;  then
                    s=$(tail -n 1 ""$temp"/readers.html")
                    echo "CRITICAL: " $s
                        # Logging
                            if [ "$logsyslog"  == "1" ] ; then    logger  "$filename $version - CRITICAL: $s"; fi
        #    Deaktiviert, da sonst das Skript komplett beendet wird
        #                    exit 2;


                    else
                            # Datei hat mehr als 1 Zeile - also suche nach Karten
                            echo "WARNING: Reader $1 disabled"
                            # Aufräumen vor dem aktivieren
                            rm -f ""$temp"/readers.html"
                            lines=""
                            s=""


                            f=$(curl --connect-timeout 2 -vu  ""$strUser":"$strPass"" --anyauth -o ""$temp"/readers.html"  "http://$strHostname:$strPort/readers.html?label=$1&action=enable"  >/dev/null 2>/dev/null)
                            if [ $? -eq 0 ]
                            then
                                    lines=$(wc -l ""$temp"/readers.html" | awk '{print $1}')


                                    if [ $lines -lt 2 ]  ;  then
                                    s=$(tail -n 1 ""$temp"/readers.html")
                                    echo "CRITICAL: " $s
                                        # Logging
                                            if [ "$logsyslog"  == "1" ] ;  then    logger  "$filename $version - CRITICAL: $s"; fi
        #    Deaktiviert, da sonst das Skript komplett beendet wird
        #                            exit 2;


                                    else
                                        # Datei hat mehr als 1 Zeile - also suche nach Karten
                                        echo "WARNING: Reader $1 enabled"
                                        #sleep 10
                                         #statuscheck
                                    fi
                            fi
                    fi


            else
                    echo "CRITICAL: Could not download readers.html (ReaderRestart)"
                        # Logging
                            if [ "$logsyslog"  == "1" ] ; then    logger   "$filename $version - CRITICAL: Could not download readers.html  (ReaderRestart)"; fi
    #    Deaktiviert, da sonst das Skript komplett beendet wird
    #                exit 2;
            fi
        fi
# -------------------------------------------------------------------
}


entitlement() {
    #echo "$strHostname:$strPort"
    y=""
    e=""
    rm -f "$temp"/status.html


    # Aktualisiere Entitlements


    if [ ! "$strReader0" == "" ]  ;  then refreshEntitlement $strReader0 ; fi
    if [ ! "$strReader1" == "" ]  ;  then refreshEntitlement $strReader1 ; fi
    if [ ! "$strReader2" == "" ]  ;  then refreshEntitlement $strReader2 ; fi
    if [ ! "$strReader3" == "" ]  ;  then refreshEntitlement $strReader3 ; fi
    if [ ! "$strReader4" == "" ]  ;  then refreshEntitlement $strReader4 ; fi


    # File Download
    a=$(curl --connect-timeout 2 -vu ""$strUser":"$strPass"" --anyauth  -o ""$temp"/status.html" "http://$strHostname:$strPort/status.html"  >/dev/null 2>/dev/null)
    if [ $? -eq 0 ]
    then
    {        lines=$(wc -l ""$temp"/status.html" | awk '{print $1}')


            if [ $lines -lt 2 ]  ;  then
                t=$(tail -n 1 ""$temp"/status.html")
                echo "CRITICAL: " $t
                    # Logging
                        if [ "$logsyslog"  == "1" ] ; then    logger  "$filename $version - CRITICAL: $t"; fi
                        if [ $debug -eq 1 ] ;then echo -e "Fehler -  Status.html hat >2 Zeilen und sieht somit nicht korrekt aus." ; fi


                exit 2;
            else
            {
            # Datei hat mehr als 1 Zeile - also suche nach Entitlements
                c=0
                z=0
                readerName="strReader"
                entName="strEnt"
                if [ $debug -eq 1 ] ;then echo -e "Beginne Schleife um  nach Entitlements zu  suchen.\nc=$c\nz=$z\nreaderName=$readerName\nEntitleName=$entName" ; fi
                while [ $z == 0 ]
                do
                {
                    # Zähle Reader/Entitlement hoch
                    readerNameComp="$readerName$c"
                    entNameComp="$entName$c"
                    if [ $debug -eq 1 ] ;then echo -e "Readername =  readerNameComp="$readerNameComp"\nReadernameREAL="${!readerNameComp}"\nEntitleName="$entNameComp"\nEntitlementREAL="${!entNameComp}""  ; fi


                    # Checke ob 1 oder mehr Entitlements
                    if [ "${!entNameComp}" -eq "1" ] ;then
                        entitleCount="entitlement"
                    else
                        entitleCount="entitlements"
                    fi
                    # Suche nach Entitlement
                    b=$(grep '<A HREF="entitlements.html?label='${!readerNameComp}'&amp;hideexpired=1" CLASS="tooltip">('${!entNameComp}' '$entitleCount')<SPAN>'  "$temp"/status.html)
                    if [ $debug -eq 1 ] ;then echo -e "Suchstring="$b"" ; fi


                    if [ $? -eq 0 ]
                        then
                                #Grep erfolgreich - aber noch nicht klar ob string gefunden
                                if [ ! "$b" == "" ]
                                then
                                    #echo "Entitlement - OK"
                                    if [ ! "$y" == "NOK" ] ; then  y="OK" ; fi
                                    e=""$e"OK: ${!readerNameComp} ("${!entNameComp}" $entitleCount) - "
                                    if [ $debug -eq 1 ] ;then echo -e "Sieht gut aus - String wurde gefunden. y=$y\ne=$e" ; fi
                                else
                                    # String nicht gefunden, also Entitlements nicht OK
                                    y=("NOK")
                                    e=""$e"CRITICAL: ${!readerNameComp} (${!entNameComp} $entitleCount) - "
                                    if [ $debug -eq 1 ] ;then echo -e  "Sieht schlecht aus - String nicht gefunden. (1. Abfrage)\ny=$y\ne=$e" ;  fi
                                fi
                        else
                                #echo "Karte - Not OK"
                                y=("NOK")
                                e=""$e"CRITICAL: ${!readerNameComp} (${!entNameComp} $entitleCount) - "
                                if [ $debug -eq 1 ] ;then echo -e "Sieht  schlecht aus - String nicht gefunden.(2. Abfrage)\ny=$y\ne=$e" ; fi
                        fi


                    # Ende If


                    tempCount=$[$c + 1]
                    if [ $debug -eq 1 ] ;then echo -e "Zähle hoch - c=$c & tempCount=$tempCount" ; fi
                    readerNameComp="$readerName$tempCount"
                    entNameComp="$entName$tempCount"
                    if [ $debug -eq 1 ] ;then echo -e "Demnach ist der  nächste Reader: $readerNameComp\nDas sollte sein:${!readerNameComp}" ;  fi


                    if [ "${!readerNameComp}" == "" -o "${!entNameComp}" == "" ]  ;  then
                        z=$[$z + 1]
                        if [ $debug -eq 1 ] ;then echo -e "So der nächste Reader ist leer also Abbruch der Schleife. z=$z" ; fi
                    else
                        # Zähle Reader hoch
                        c=$[$c + 1]
                        if [ $debug -eq 1 ] ;then echo -e "Ende Schleifendurchlauf. Zähle Reader hoch. c=$c" ; fi
                    fi
                }
                done


                if [ "$y"  == 'OK' ] ; then
                    echo "$e"
                    # Logging
                            if [ "$logsyslog"  == "1" ] ; then    logger  "$filename $version - $e"; fi
                            if [ $debug -eq 1 ] ;then echo -e "Fertig - Y = OK - also Exit 0." ; fi
                    exit 0
                fi


                if [ "$y" == "NOK" ] ; then
                    echo "$e"
                    # Logging
                            if [ "$logsyslog"  == "1" ] ; then    logger  "$filename $version - $e"; fi
                            if [ $debug -eq 1 ] ;then echo -e "Fertig - Y = NOK - also Exit 2." ; fi
                    exit 2
                fi
            }
            fi
    }
    else
        {
        echo "CRITICAL: Could not download status.html (StatusCheck)"
        # Logging
            if [ "$logsyslog"  == "1" ] ; then    logger  "$filename  $version - CRITICAL: Could not download status.html (StatusCheck)"; fi
        exit 2;
        }
    fi
}




refreshEntitlement() {
    if [ $debug -eq 1 ] ;then echo -e "Beginne Restart Entitlement Funktion" ; fi
#        echo "$strHostname:$strPort"
    rm -f ""$temp"/readers.html"
    # File Download
    if [ $debug -eq 1 ] ;then echo -e "readers.html wird runtergeladen - bzw. refresh befehl ausgeführt" ; fi
    g=$(curl --connect-timeout 2 -vu ""$strUser":"$strPass"" --anyauth  -o ""$temp"/readers.html"  "http://$strHostname:$strPort/readers.html?label=$1&action=reread"  >/dev/null 2>/dev/null)
    if [ $? -eq 0 ]
    then
            # Antiloop hochzählen
            echo $[$r+1] > "$temp/$1"


            # Zähle Zeilen um Fehler fest zu stellen ( Datei muss <1 Zeile sein )
            lines=$(wc -l ""$temp"/readers.html" | awk '{print $1}')


            if [ $lines -lt 2 ]  ;  then
            s=$(tail -n 1 ""$temp"/readers.html")
            echo "CRITICAL: " $s
                # Logging
                    if [ "$logsyslog"  == "1" ] ; then    logger  "$filename $version - CRITICAL: $s"; fi
#    Deaktiviert, da sonst das Skript komplett beendet wird
#                    exit 2;


            else
                if [ $debug -eq 1 ] ;then echo "OK: Entitlement Refresh" ; fi
                if [ "$logsyslog"  == "1" ] ; then    logger  "$filename $version - OK: Entitlement Refresh von $1"; fi
            fi


    else
            echo "CRITICAL: Could not download readers.html (ReaderRefresh)"
                # Logging
                    if [ "$logsyslog"  == "1" ] ; then    logger   "$filename $version - CRITICAL: Could not download readers.html  (ReaderRefresh)"; fi
#    Deaktiviert, da sonst das Skript komplett beendet wird
#                exit 2;
    fi
# -------------------------------------------------------------------
}




if [ "$strpart" == "statuscheck" ]; then
    statuscheck


elif [ "$strpart" == "entitlement" ]; then
    entitlement


elif [ "$strpart" == "restart" ]; then


    c=0
    z=0
    readerName="strReader"
    if [ $debug -eq 1 ] ;then echo -e "Beginne Schleife um nach Readern zu suchen.\nc=$c\nz=$z\nreaderName=$readerName" ; fi
    while [ $z == 0 ]
    do
        {
            # Zähle ReaderNamen hoch
            readerNameComp="$readerName$c"
            if [ $debug -eq 1 ] ;then echo -e "Readername =  readerNameComp=$readerNameComp\nReadernameREAL = ${!readerNameComp}" ;  fi


            # Code
            readerRestart ${!readerNameComp}


            # Count up
            tempCount=$[$c + 1]
            if [ $debug -eq 1 ] ;then echo -e "Zähle hoch - c=$c & tempCount=$tempCount" ; fi
            readerNameComp="$readerName$tempCount"
            if [ $debug -eq 1 ] ;then echo -e "Demnach ist der nächste  Reader: $readerNameComp\nDas sollte sein:${!readerNameComp}" ; fi


            if [ "${!readerNameComp}" == "" ]  ;  then
                z=$[$z + 1]
                if [ $debug -eq 1 ] ;then echo -e "So der nächste Reader ist leer also Abbruch der Schleife. z=$z" ; fi
            else
                # Zähle Reader hoch
                c=$[$c + 1]
                if [ $debug -eq 1 ] ;then echo -e "Ende Schleifendurchlauf. Zähle Reader hoch. c=$c" ; fi
            fi
        }
    done


fi


# Ende Skript
# Oscam Watchdog & Nagios Script
 
Zuletzt bearbeitet:
AW: OScam Reader "überwachen"

hallo Freunde
habe nicht wirklich verstanden wo ich meine Parameter hier eintragen muss.
Versuche das Script zum laufen zu bekommen aber es will nicht .
MfG
 
AW: OScam Reader "überwachen"

Der Reader an meinem Debian System hat auch manchmal Schluckauf und wird dann regelmäßig einem neuen /dev/ttyUSBx zugewiesen.
Daher habe ich eine etwas einfachere Lösung über udev rules implementiert. Die Regel wird immer dann getriggert wenn sich am USB System der Status des Readers ändert.

Über lsusb holt man sich die ids des gerätes und legt dann eine udev rule an.
Z.B.: /etc/udev/rules.d/10-local.rules
Dort steht dann:
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="my_uart", RUN+="/bin/sh /home/cubie/restartOscam.sh"

In Oscam ist der Reader dann als /dev/my_uart einzutragen.

restartOscam.sh

#!/bin/sh
/usr/sbin/service oscam stop
sleep 2
/usr/sbin/service oscam start

Die sh Datei natürlich mit chmod +x restartOscam.sh ausführbar machen.

Wenn man mehrere Reader hat, dann werden diese so natürlich auch unnötig durchgestartet. Daher das Script nach belieben anpassen.
Aber so entfällt zu Mindestens in meinem Fall der Cron Job.
 
Zuletzt bearbeitet:
AW: OScam Reader "überwachen"

Komisch, mit UDEV arbeiten "wir" hier schon seit Jahren.
Nur tragen wir dort die Seriennummer des Readers ein, damit wird der nach jedem (!) Reboot unter den gleichen Vorgaben eingehangen.

Weiterhin sollte die Rule ein Nummer oberhalb 91 bekommen, weil das sonst nicht rund läuft.

Wie fragst Du denn den Ausfall des Readers ab?
Da Deine Ausführung ja erst greift, wenn das System eine neue /dev/ttyUSBx zugewiesen hat.
 
AW: OScam Reader "überwachen"

Tut mir leid, dass ich überhaupt was geschrieben habe und nicht stundenlang vorher "euer" gesamtes Forum gelesen habe. Musst dich echt nich direkt persönlich angegriffen fühlen. Das einzige was dich an meinem Beitrag ja stören kann ist das Wort "einfacher". Ja, meine Lösung ist einfacher als ein 50 Zeilen Skript, aber reicht für meinen konkreten Fall genau aus; und nützt damit vllt. anderen in dem konkreten Fall. Ich habe damit andere Lösungen nicht schlecht gemacht.

Mein konkretes Problem war, dass der Reader manchmal USB technisch komplett disconnected und direkt wieder connected.
In dem Fall wird er von Oscam nicht neu initialisiert. Daher startet die udev rule oscam neu.
 
Zuletzt bearbeitet:
AW: OScam Reader "überwachen"

Habe Dir ein Danke gegeben, weil ich finde, daß es mehrere Ansätze zur Lösung geben kann.
Daß nicht Jeder stundenlang liest, ist mir auch klar.

Mit "wir" meinte ich nicht die Welt, nur die, die das eben schon länger machen.

Hatte auch schon ein Script entworfen, damit ein einzelner Reader ( der per Rules eingebunden sein sollte ) bei Ausfall sicher wieder gestartet wird.
Ohne jedesmal oscam zu rebooten.

Und Dein Vorschlag hat was, weil er eben nicht so ewig lang ist.
Es gibt immer mehrere Wege zum Ziel.

Aber wie wird das nun konkret erkannt, daß der Reader eine neue Zuweisung bekommen hat?
Ist mir noch nicht aufgegangen.
 
Zurück
Oben