1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

HowTo OScam Reader "überwachen"

Dieses Thema im Forum "OScam Tools" wurde erstellt von aragorn, 23. Januar 2013.

  1. aragorn
    Offline

    aragorn Guest

    also, ihr braucht nur eins der beiden scripts:

    1. Script (© feissmaik)
    Vorraussetzung:
    apt-get install curl
    entweder einen eigenen crontab eintrag für das script, um es jede minute zu prüfen - oder in oscam-watchdog.sh integriern (das script über watchdog aufrufen)

    Code:
    #!/bin/bash
    #
    #### CONFIG - START
    
    ## OScam WebIf with SSL? [1=yes , 0=no]
    OSssl="0"
    
    ## /path/to/oscam.conf?
    OScfg="/var/etc/oscam.conf"
    
    ## Cards to monitor
    CARD["1"]="mille"
    CARD["2"]="sky"
    CARD["3"]="sky2"
    CARD["4"]="skdhd"
    #CARD["5"]="mtv"
    
    ## OScam's Logfile?
    OSlog="/var/log/oscam.log"
    
    ## monitoring Error message
    OSerror="ERROR Phoenix_GetStatus: ioctl error in card detection for %CARDNAME%"
    
    ## reporting logfile for this script?
    OStolog="/var/log/oscam.error"
    
    #### CONFIG - END
    
    
    OSip="127.0.0.1"
    [ "$OSssl" = 1 ] && URL="https://" || URL="http://"
    
    # Simple URL encoding
    proc_url_encode() {
        out=${1//%/%25}; out=${out//\{/%7B}; out=${out//\}/%7D}; out=${out//|/%7C};
        out=${out//\\/%5C}; out=${out//^/%5E}; out=${out//~/%7E}; out=${out//[/%5B};
        out=${out//]/%5D}; out=${out//\`/%60}; out=${out//#/%23}; out=${out//>/%3E};
        out=${out//\$/%24}; out=${out//&/%26}; out=${out//+/%2B}; out=${out//,/%2C};
        out=${out//\//%2F}; out=${out//:/%3A}; out=${out//;/%3B}; out=${out//=/%3B};
        out=${out//\?/%3F}; out=${out// /%20}; out=${out//</%3C};
        out=${out//\!/%21}; out=${out//\"/%22}; out=${out//\@/%40}; out=${out//\'/%27};
        out=${out//\(/%28}; out=${out//\)/%29}; out=${out//\*/%2A}; out=${out//\-/%2D};
        out=${out//\_/%5F}; out=${out//\./%2E}; out=${out//\€/%80};
        echo $out
    }
    
    proc_parse_cfg() {
        i=0
        while read line; do
            line=$(echo $line | sed -e 's/ //g')
            if [[ "$line" =~ ^[^#]*= ]]; then
                cfg_name[$i]=$(echo $line | cut -d'=' -f 1)
                cfg_value[$i]=$(echo $line | cut -d'=' -f 2-)
                ((++i))
            fi
        done < $1
    }
    
    get_cfg_value() {
        i=0
        for name in ${cfg_name
    [*]}; do
            [ "$1" = "$name" ] && echo "${cfg_value[$i]}" && break
            ((++i))
        done
    }
    
    proc_get_infos() {
        proc_parse_cfg $OScfg
        WEBPORT=$(get_cfg_value httpport)
        [ -z "$WEBPORT" ] && "ERROR: WebIf isnt enabled! Abort!" && exit 1
        USERNAME=$(get_cfg_value httpuser)
        if [ ! -z "$USERNAME" ]; then
            PASSWORD=$(get_cfg_value httppwd)
            URL="$URL"`proc_url_encode "${USERNAME}"`":"`proc_url_encode "${PASSWORD}"`"@${OSip}:${WEBPORT}"
        else
            URL="${URL}$OSip:$WEBPORT"
        fi
    }
    
    proc_get_infos
    
    for card in ${CARD
    [*]}; do
        ERRORmsg=${OSerror//%CARDNAME%/$card}
        founds=`tail -10 $OSlog | grep "$ERRORmsg" | wc -l`
        if [ $founds -gt 0 ]; then
            echo "`date +%d-%b-%Y` `date +%H:%M:%S`: $card Card lost" >> $OStolog
            curl -s --digest "$URL/readers.html?label=${card}&action=disable" >/dev/null
            curl -s --digest "$URL/readers.html?label=${card}&action=enable" >/dev/null
        fi
    done
    
    exit 0
    

    2. Script: (© constey)
    Ich hab eben erst gesehen, dass Monarch auch ein etwar ähnliches Skript geschrieben hat.
    Meins ist etwas komplexer und lässt sich komplett via Kommandozeilenparameter verwendenn.
    Für weitere Ideen oder gefundene Fehler bin ich gerne dankbar :)

    Funktionen:
    - Überpüft auf CARDOK von bis zu 5 Readern
    - Kann sofern eingestellt Reader bei nicht CARDOK neu starten
    - Kann die Anzahl an Entitlements pro Karte überprüfen
    - Rückmeldung inkl. Exit Codes

    Geplant:
    - Eigene Email Benachrichtigung versenden, wenn nicht als Nagios/Munin Plugin verwendet

    Gruß
    Constey

    Getestet mit Oscam #7587.

    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.
    # 
    # 
    # -------------------------------
    filename="check_oscam"
    version="0.4"
    # 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 <A  HREF="entitlements.html?label='${!readerNameComp}'&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}'&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 
    # -------------------------------
    
     
    #1
  2. phantom

    Nervigen User Advertisement

  3. goerdi
    Offline

    goerdi Ist oft hier

    Registriert:
    5. Juli 2011
    Beiträge:
    131
    Zustimmungen:
    9
    Punkte für Erfolge:
    18
    AW: OScam Reader "überwachen"

    Hi !

    ich habs bei mir mal draufgemacht (das untere fue nagios) aber das will vom Prinzip her schon nicht....
    Code:
    ./check_oscam: line 279: syntax error near unexpected token `('
    ./check_oscam: line 279: `                    echo "CRITICAL: Could not download readers.html (ReaderRestart)"'
    
    
    aufruf
    Code:
     ./check_oscam IP_ADRESSE 9999 admin "password" statuscheck autorestart omnikey3121_0 09C4

    Gruss goerdi
     
    #2
  4. aragorn
    Offline

    aragorn Guest

    AW: OScam Reader "überwachen"

    kann ich nicht nachvollziehn - hier funktioniert es ohne fehlermeldungen

    bist du sicher das du es unverändert, korrekt und vollständig copy&pastet hast? (insg. 495 zeilen)

    in Zeile 279 steht:
    Code:
                        echo "CRITICAL: Could not download readers.html (ReaderRestart)"
    da das in " " steht, sollte es mit ( ) keinerlei probleme geben - du kannst ja mal zum testen (ReaderRestart) raus löschen...



    /edit: da es aber auch nicht mein script ist kann ich dafür schlecht support geben - benutz halt stattdessen das erste script!?
     
    Zuletzt von einem Moderator bearbeitet: 25. Januar 2013
    #3
  5. SwitzCH
    Offline

    SwitzCH Hacker

    Registriert:
    20. Juli 2010
    Beiträge:
    343
    Zustimmungen:
    62
    Punkte für Erfolge:
    28
    AW: OScam Reader "überwachen"

    Mit einem Windows PC und normalem Editor erstellt?
     
    #4
  6. goerdi
    Offline

    goerdi Ist oft hier

    Registriert:
    5. Juli 2011
    Beiträge:
    131
    Zustimmungen:
    9
    Punkte für Erfolge:
    18
    AW: OScam Reader "überwachen"

    Das erste scheidet aus weil ich es in mein nagios einbauen wollte... und vor allem weil der check nicht auf der maschin laeuft auf der oscam laeuft.....

    das hab ich schon probiert (rauszuloeschen) dann hab ich den Fehler etwas weiter vorne.... :(

    btw: nein mit /bin/dash und vim erstellt :D

    So ich hab jetzt mal die ganzen ( und ) rausgeloescht dann kommt nur noch

    Code:
     ./check_oscam: line 450: syntax error near unexpected token `}'
    ./check_oscam: line 450: `}'
    
    mach ich das noch weg...
    Code:
     ./check_oscam: line 497: syntax error: unexpected end of file 

    gruss goerdi
     
    Zuletzt bearbeitet: 25. Januar 2013
    #5
  7. aragorn
    Offline

    aragorn Guest

    AW: OScam Reader "überwachen"

    dann hast du ein copy&past fehler und irgendwo ein zeichen zu viel oder zu wenig kopiert (es sind nur 495 zeilen, nicht 497) oder irgendwas anderes verhunzt..
    wie gesagt funktioniert das bei mir so wie es ist absolut störungsfrei - der fehler muss also bei dir liegen
     
    #6
  8. goerdi
    Offline

    goerdi Ist oft hier

    Registriert:
    5. Juli 2011
    Beiträge:
    131
    Zustimmungen:
    9
    Punkte für Erfolge:
    18
    AW: OScam Reader "überwachen"

    Kannst du das file bitte mal anhaengen ?

    gruss goerdi
     
    #7
  9. BaNaNaBeck
    Offline

    BaNaNaBeck Chef Mod

    Registriert:
    7. Februar 2008
    Beiträge:
    2.967
    Zustimmungen:
    3.027
    Punkte für Erfolge:
    113
    Beruf:
    Zerstörer
    Ort:
    Überall und Nirgendwo
    AW: OScam Reader "überwachen"

    Im Anhang mal das Script von feissmaik als Datei. Im crontab dazu noch folgendes eintrage:
    Code:
    * * * * * root /var/emu/script/oscam-checkreader.sh  #OScam - Teste ob Reader Online sind (jede Minute)
     
    #8
  10. Skywalker
    Offline

    Skywalker Chef Mod

    Registriert:
    18. April 2009
    Beiträge:
    6.137
    Zustimmungen:
    8.294
    Punkte für Erfolge:
    113
    Ort:
    Bayern
    AW: OScam Reader "überwachen"

    Hi,
    ich klink mich mal hier mit ein :ja
    Da mein aktuelles Freetz Image Image kein "Watchdog" enthält, lass ich OScam selbst und Dyndns schon per crontab überwachen
    ### OScam Check alle 20min. ####
    */20 * * * * ps | grep oscam/oscam | grep -v grep || /etc/init.d/rc.oscam start
    #
    ### Dyndns Check alle 30min. #####
    */30 * * * * sh /var/media/ftp/uStor01/scripts/DynUpdateCheck.sh
    Das ganze funktioniert auch bestens :hell

    Jetzt würde ich aber meine beiden Reader auch noch gerne überwachen lassen, und bin auf die in Post#1 veröffentlichen Scripte gestoßen.
    Getestet hab ich das Script#2 (© constey)
    Vorgang:
    1. das Script (auch im Anhang) auf die FB nach /var/media/ftp/uStor01/scripts kopiert
    2. per telnet dem Script die Rechte 755 vergeben: chmod 755 /var/media/ftp/uStor01/scripts/check_oscam.sh
    3. das Script gestartet: sh /var/media/ftp/uStor01/scripts/check_oscam.sh
    Als Ausgabe bekam ich nun dies
    root@fritz:/var/mod/root# sh /var/media/ftp/uStor01/scripts/check_oscam.sh

    Warning: Wrong command line arguments.

    Usage: ./check_oscam <hostname> <port> <username> <password> <part> <autorestar
    t> <reader0> <reader1> ... <reader4> <entitlementsReader0> <entitlementsReader
    1> ... <entitlementsReader4>


    Parts are: statuscheck, restart, entitlement

    Example: ./check_oscam 127.0.0.1 1403 admin "password" statuscheck autorestart h
    dplus 1702
    - Checks the Readers with label hdplus and 1702. If Status != CARDOK the reader
    will be restarted automatic.

    Example: ./check_oscam 127.0.0.1 1403 admin "password" statuscheck norestart hdp
    lus 1702
    - Checks the Readers with label hdplus and 1702. But with no reader restart.

    Example: ./check_oscam 127.0.0.1 1403 admin "password" entitlement norestart hdp
    lus 1702 "" "" "" "1" "10"
    - Refresh the Entitlements & Checks the Count of Entitlements of reader with la
    bel hdplus & 1702 where hdplus should have 1 entitlement and 1702 should have 1
    0 entitlements.
    - You can specify a maximum of 5 readers. If you specify not 5 you have to plac
    e 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!

    root@fritz:/var/mod/root#
    Heißt das jetzt, das Script funktioniert?
    Bin in der sache nicht gerade ein Profi, deshalb SORRY für die vielleicht dumme Frage :emoticon-0127-lipss

    Sollte das also alles so rennen, fehlt ja nur noch der Eintrag in der crontab vom Freetz. Seh ich das richtig?
    ### OScam Reader Check alle 40min. #####
    */40 * * * * sh /var/media/ftp/uStor01/scripts/check_oscam.sh
    Vielen Dank schon mal für eure Hilfe :thank_you:
     
    #9
  11. aragorn
    Offline

    aragorn Guest

    AW: OScam Reader "überwachen"

    nein - les halt mal das was dir da ausgegeben wird!

    das script benötigt weitere parameter (command line arguments) - welche das sind werden dir dort angezeigt (Usage) und auch Beispiele gezeigt (Example)



    /edit:
    das geht auch mit dem 1. script über die einstellung OSip
     
    Zuletzt von einem Moderator bearbeitet: 27. Januar 2013
    #10
  12. Skywalker
    Offline

    Skywalker Chef Mod

    Registriert:
    18. April 2009
    Beiträge:
    6.137
    Zustimmungen:
    8.294
    Punkte für Erfolge:
    113
    Ort:
    Bayern
    AW: OScam Reader "überwachen"

    Danke, hab dies eben gesehen.
    Wo werden nun die genauen Parameter im Script eingetragen?
    In meinem Fall
    ./check_oscam 192.168.178.100 xxx oscam xxx statuscheck autorestart hdplussat skysat

    -----------------------------------

    Update

    Keiner kann mir da helfen? Nutzt denn niemand weiter dies Skript?
     
    Zuletzt bearbeitet: 28. Januar 2013
    #11
  13. Superhansi
    Offline

    Superhansi Spezialist

    Registriert:
    26. Februar 2008
    Beiträge:
    666
    Zustimmungen:
    505
    Punkte für Erfolge:
    0
    Ort:
    mittendrin
    AW: OScam Reader "überwachen"

    Ich glaube nicht das die beiden Scripte grundsätzlich überhaupt auf einer Fritzbox laufen (ohne Änderungen).
    Es sind ja "bash" -Scripte, auf einer Fritzbox laufen soviel ich weiß nur "sh" -Scripte.

    Auf jeden Fall wird "curl" für beide Scripte benötigt, ob das in deinem Freetz-Image ist mußt du prüfen (ist im Normalfall nicht drin).



    Gruß Superhansi
     
    #12
    Skywalker und (gelöschter Benutzer) gefällt das.
  14. Skywalker
    Offline

    Skywalker Chef Mod

    Registriert:
    18. April 2009
    Beiträge:
    6.137
    Zustimmungen:
    8.294
    Punkte für Erfolge:
    113
    Ort:
    Bayern
    AW: OScam Reader "überwachen"

    Danke für diese Info :)
    Dann werd ich wohl weiter suchen müssen...
     
    #13
  15. aragorn
    Offline

    aragorn Guest

    AW: OScam Reader "überwachen"

    das wird nirgends "eingetragen"..

    das sind parameter die beim ausführen an das script übergeben werden - wie die zeile eigentlich auch verrät: mit "./check_oscam" wird das script ausgeführt und alles danach sind, durch leerzeichen getrennt, parameter/argumente..
    das ist wie das ausführen von "tar -xfz bla.tgz" ... tar ist der auszuführende befehl. -xfz der erste parameter und bla.tgz der zweite parameter

    also jetzt solltest du das langsam mal verstanden haben
     
    #14
  16. Skywalker
    Offline

    Skywalker Chef Mod

    Registriert:
    18. April 2009
    Beiträge:
    6.137
    Zustimmungen:
    8.294
    Punkte für Erfolge:
    113
    Ort:
    Bayern
    AW: OScam Reader "überwachen"

    Hi,
    hab hier ein Script, dass die Karten in OScam (Freetz Image) überwachen kann.
    Code:
    #!/bin/sh
    #card check
    
    if [ -e /etc/init.d/rc.oscam ]; then
    
    if [ -n "$(grep -e "card initializing error" -e "usb bulk write failed" /var/media/ftp/uStor01/logs/oscam.log)" ]; then
    /etc/init.d/rc.oscam stop
    
    echo "$(date) => oscam - card initializing error - reboot" >> /var/media/ftp/uStor01/logs/all_check.log
    
    rm -rf /var/media/ftp/uStor01/logs/oscam.log
    
    /sbin/reboot
    
    break
    fi
    fi
    
    exit 0 
    Sollte eine Karte nicht erkannt werden (card initializing error) wird OScam gestoppt und dann die FB neugestartet.
    Das Script muss auf den Stick kopiert werden und mit Rechte 755 versehen.
    Die beiden LOG Dateien kommen ebenfalls auf den Stick.

    Das ganze wird per cronjob gesteuert
    ### OScam Reader (Cards) Check alle 30min. ####
    */30 * * * * sh /var/media/ftp/uStor01/scripts/chk_card.sh

    Hier im Beispiel liegt das Script auf dem Stick unter
    /var/media/ftp/uStor01/scripts
    und die Log Files unter
    /var/media/ftp/uStor01/logs

    Wer dies ebenfalls nutzen möchte, anbei alle nötigen Dateien.
     
    #15

Diese Seite empfehlen