Watchdog (Oscam): Unterschied zwischen den Versionen

Aus Tutorials
Zur Navigation springen Zur Suche springen
 
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{note|Noch in Bearbeitung}}
== verwandte Themen ==
== verwandte Themen ==


Siehe auch: [[Startup-Scripte (Enigma2)|Startup-Scripte]], [[Mails versenden (Enigma2)|Mails versenden (Enigma2)]]
Siehe auch: [[Startup-Scripte (Enigma2)|Startup-Scripte]], [[Mails versenden (Enigma2)|Mails versenden (Enigma2)]]


== Raspberry ==
== OSCam Cardserver überwachen ==
 
{{note|Noch in Bearbeitung}}
 
 
=== PID ermitteln ===
 
<pre>
pidof /usr/local/bin/oscam
</pre>
 
=== Script ===
 
<pre>
sudo vi /usr/local/bin/oscam_watchdog.sh
</pre>
 
<pre>
#!/bin/bash
 
PIDFILE=/var/run/oscam.pid
if (kill -0 `cat $PIDFILE`)
then
echo "it's alive!" > /dev/null
else
rm $PIDFILE
/usr/local/bin/oscam start > /dev/null
echo "OSCAM restarted at `date`" >> /var/log/oscam-crash.log
fi
</pre>
 
<pre>
sudo chmod +x /usr/local/bin/oscam_watchdog.sh
</pre>
 
<pre>
#!/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
Siehe [[Oscam Cardserver überwachen (Rapberry)|OSCam Cardserver überwachen]]
    entitlement


elif [ "$strpart" == "restart" ]; then
== OSCam Client-Verbindung überwachen ==
   
    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
Siehe [[OSCam Client-Verbindung überwachen (Satreceiver)|OSCam Client-Verbindung überwachen]]
# Oscam Watchdog & Nagios Script
# -------------------------------
</pre>
 
=== Links ===
 
[https://www.digital-eliteboard.com/threads/oscam-reader-ueberwachen.240969/ https://www.digital-eliteboard.com/threads/oscam-reader-ueberwachen.240969/]


== Receiver ==
== Receiver ==
Zeile 621: Zeile 89:


[http://raspberry.tips/raspberrypi-tutorials/oscam-watchdog-fuer-den-raspberry-pi/ http://raspberry.tips/raspberrypi-tutorials/oscam-watchdog-fuer-den-raspberry-pi/]
[http://raspberry.tips/raspberrypi-tutorials/oscam-watchdog-fuer-den-raspberry-pi/ http://raspberry.tips/raspberrypi-tutorials/oscam-watchdog-fuer-den-raspberry-pi/]
== Raspberry ==
{{note|Noch in Bearbeitung}}
=== PID ermitteln ===
<pre>
pidof /usr/local/bin/oscam
</pre>
=== Script ===
<pre>
sudo vi /usr/local/bin/oscam_watchdog.sh
</pre>
<pre>
#!/bin/bash
PIDFILE=/var/run/oscam.pid
if (kill -0 `cat $PIDFILE`)
then
echo "it's alive!" > /dev/null
else
rm $PIDFILE
/usr/local/bin/oscam start > /dev/null
echo "OSCAM restarted at `date`" >> /var/log/oscam-crash.log
fi
</pre>
<pre>
sudo chmod +x /usr/local/bin/oscam_watchdog.sh
</pre>




Zurück zu [[OSCam_(Raspberry)#Watchdog|OSCam_(Raspberry)]], [[OSCam_(Satreceiver)#Watchdog|OSCam_(Satreceiver)]]
Zurück zu [[OSCam_(Raspberry)#Watchdog|OSCam_(Raspberry)]], [[OSCam_(Satreceiver)#Watchdog|OSCam_(Satreceiver)]]

Aktuelle Version vom 4. Dezember 2023, 22:00 Uhr

verwandte Themen

Siehe auch: Startup-Scripte, Mails versenden (Enigma2)

OSCam Cardserver überwachen

Siehe OSCam Cardserver überwachen

OSCam Client-Verbindung überwachen

Siehe OSCam Client-Verbindung überwachen

Receiver

Startscript ermitteln

Der Befehl

ls -la /etc/init.d/

sollte einen Eintrag wie folgenden ausgeben:

current_cam.sh -> /usr/script/oscam_1.20-unstable-11682_cam.sh

PID ermitteln

pidof oscam_1.20-unstable-11682

Script

vi /usr/script/oscam_watchdog.sh

VTi Team Image (Receiver Hofstetten):

#!/bin/bash

PID=$(pidof oscam_1.20-unstable-11682)
if (kill -0 $PID 2>/dev/null)
then
  echo "it's alive!" > /dev/null
else
  /usr/script/oscam_1.20-unstable-11682_cam.sh restart > /dev/null
  echo "OSCAM restarted at `date +"'%d.%m.%Y %H:%M'"`" >> /tmp/crash-log-oscam.log
  echo -e "OSCAM of receiver-hofstetten restarted at `date +"'%d.%m.%Y %H:%M'"`" | /usr/bin/mailx -A kirner.or.at -s "OSCAM of receiver-hofstetten restarted" admin@kirner.or.at
fi

OpenATV (Receiver Seestadt):

#!/bin/bash

PID=$(pidof /usr/bin/oscam-trunk)
if (kill -0 $PID 2>/dev/null)
then
  echo "it's alive!" > /dev/null
else
  /etc/init.d/softcam.oscam-trunk restart > /dev/null
  echo "OSCAM restarted at `date +"'%d.%m.%Y %H:%M'"`" >> /tmp/crash-log-oscam.log
  echo -e "OSCAM of receiver-seestadt restarted at `date +"'%d.%m.%Y %H:%M'"`" | /usr/bin/mailx -A kirner.or.at -s "OSCAM of receiver-seestadt restarted" admin@kirner.or.at
fi
chmod +x /usr/script/oscam_watchdog.sh

Init-Script erstellen

ln -sf /usr/script/oscam_watchdog.sh /etc/init.d/oscam_watchdog.sh
cd /etc/rc3.d/
ln -sf ../init.d/oscam_watchdog.sh /etc/rc3.d/S99oscam_watchdog.sh

Links

http://raspberry.tips/raspberrypi-tutorials/oscam-watchdog-fuer-den-raspberry-pi/

Raspberry

Noch in Bearbeitung

PID ermitteln

pidof /usr/local/bin/oscam

Script

sudo vi /usr/local/bin/oscam_watchdog.sh
#!/bin/bash

PIDFILE=/var/run/oscam.pid
if (kill -0 `cat $PIDFILE`)
 then
 echo "it's alive!" > /dev/null
 else
 rm $PIDFILE
 /usr/local/bin/oscam start > /dev/null
 echo "OSCAM restarted at `date`" >> /var/log/oscam-crash.log
fi
sudo chmod +x /usr/local/bin/oscam_watchdog.sh


Zurück zu OSCam_(Raspberry), OSCam_(Satreceiver)