reload oscam.server

feissmaik
Entwickler Team
Beiträge: 2576
Registriert: So 17. Apr 2011, 11:39
Been thanked: 1 time
Kontaktdaten:

reload oscam.server

Beitrag von feissmaik »

Ich hab ein blödes Problem und muss gestehen das ich schon lange nichts mehr in diesem Bereich gemacht habe - das OScam Wiki sagt dazu aber auch nichts weiter, also hoffe ich jetzt einfach mal das es einen geheimen Trick gibt :?:

Problem:

Ich hab ein Peer dessen DynDNS nicht mehr funktioniert, den ich aber auch nicht erreicht kriege (keine Antwort via EMail usw), seine Clientverbindung ist aber weiterhin aktiv und greift auch weiter ab...

Bisher war ich immer manuell übers OScam WI daher gegangen und die Client-IP bei seinem Server händisch eingetragen - und das jeden Tag wiederholt weil wegen Zwangstrennung etc..

Da hab ich aber langsam keine Lust mehr zu und wollte das automatisieren. Also hab ich ein Script geschrieben welches das Logfile überwacht und sobald der Client eine Verbindung herstellt wird oscam.server bearbeitet und der jeweilige Eintrag aktualisiert.

Im wiki steht das man OScam mithilfe eines HUB Signals (kill -1 $pid) dazu bringen kann die oscam.server neu einzulesen: http://www.streamboard.tv/oscam/ticket/498

Das Problem was ich aber nun habe ist, das die Änderungen aber nicht übernommen werden, also die Datei ist verändert aber OScam übernimmt das nicht :outch:


Weiß jemand die ich das beheben kann?
(möchte vermeiden OScam komplett neu zu starten)
Du musst nicht kämpfen um zu siegen
Benutzeravatar
Alx83
Entwickler Team
Beiträge: 662
Registriert: Mo 12. Mär 2012, 22:48
Has thanked: 15 times
Been thanked: 7 times
Kontaktdaten:

Re: reload oscam.server

Beitrag von Alx83 »

Schau mal ob du da was brauchen kannst: http://ipc.pebkac.at/forum/viewtopic.php?f=17&t=847
Auf den Alkohol! Die Ursache und Lösung aller Probleme - Homer J. Simpson
Benutzeravatar
jensebub
IPC Meister
Beiträge: 1133
Registriert: So 1. Mai 2011, 09:34
Been thanked: 1 time
Kontaktdaten:

Re: reload oscam.server

Beitrag von jensebub »

Was spricht denn gegen den Button *reload readers* auf der reader seite

Code: Alles auswählen

 curl - s http://IP:port/readers.html?action=reloadreaders


Gruß
jensebub
rolu2
IPC Anfänger
Beiträge: 70
Registriert: Sa 21. Mai 2011, 16:05
Kontaktdaten:

Re: reload oscam.server

Beitrag von rolu2 »

Mit reloadreaders startet man ja alle Reader neu. vllt reicht es ja nur den passenden Reader ein und auszuschalten mit

Code: Alles auswählen

curl -s --digest -o - -u $LOGIN:$PW "http://$IP:$PORT/readers.html?label=XXXXXX&action=disable"
sleep 5
curl -s --digest -o - -u $LOGIN:$PW "http://$IP:$PORT/readers.html?label=XXXXXXX&action=enable"
Bei XXXXXX den Labelnamen des Readers rein
gruß rolu2
Benutzeravatar
jensebub
IPC Meister
Beiträge: 1133
Registriert: So 1. Mai 2011, 09:34
Been thanked: 1 time
Kontaktdaten:

Re: reload oscam.server

Beitrag von jensebub »

Ich will mich ja nicht streiten, aber alle realer zu restarten kommt dem Thema "reload oscam server" schon recht nahe...
Aber trotzdem hast du recht, damit nur einzelne realer zu restarten... ;)

Gruß
jensebub
feissmaik
Entwickler Team
Beiträge: 2576
Registriert: So 17. Apr 2011, 11:39
Been thanked: 1 time
Kontaktdaten:

Re: reload oscam.server

Beitrag von feissmaik »

Ich nutze bereits

Code: Alles auswählen

curl -s --digest "$URL/readers.html?label=${READER}&action=disable" >/dev/null
Aber das blöde is halt das im oscam.server File zwar die neue IP drin steht, OScam das aber nicht übernimmt. :evil:

Also oscam.server ist aktuell, guck ich ins WI von OScam steht noch die alte IP drin.
OScam übernimmt die neue aber selbst nach einem restart nicht - da scheint es wohl irgendwie ne art Cache zu geben? Ich muss OScam richtig beenden bisschen warten und manuell starten, dann wird erst die Datei neu eingelesen... Vielleicht sind die Änderungen auch zu gering? :outch:
Du musst nicht kämpfen um zu siegen
rolu2
IPC Anfänger
Beiträge: 70
Registriert: Sa 21. Mai 2011, 16:05
Kontaktdaten:

Re: reload oscam.server

Beitrag von rolu2 »

@jensebub
Wir steiten nicht :)

@feissmaik
Den Sinn deiner Sache sehe nur irgendwie nicht so ganz.

Die Dyndnssperre ist ja dafür da, das sich nur der einlogt, wo auch die dyndns zur Einlogip passt. Mit deinen script weiss du ja auch nicht, ob es überhaupt der Client ist. Da kannst du doch gleich die dyndnssperre erst mal deaktivieren
gruß rolu2
feissmaik
Entwickler Team
Beiträge: 2576
Registriert: So 17. Apr 2011, 11:39
Been thanked: 1 time
Kontaktdaten:

Re: reload oscam.server

Beitrag von feissmaik »

Es geht nicht um eine DDNS-Sperre.
Es geht darum das die DDNS des Peers nicht mehr funktioniert, der Client aber weiterhin connected. Also möchte ich die IP des Readers von der des Clients ersetzen...

Und ich weiß schon das es 'der' Client ist da ich das oscam.log ja gezielt danach durchsuche ;)
Spoiler
Show

Code: Alles auswählen

<?php
$LOG = "log.OScam";
$LOGsearchString = "..ClientLogin..";
$CONF = "oscam.server";

$numLines = 200000;
$maxLineLength = 200;

/* LOG FILE */
$fp = fopen($LOG, 'r') OR die("Error: can't find or open $LOG");
$data = fseek($fp, -($numLines * $maxLineLength), SEEK_END);
$lines = array();
while (!feof($fp)) { $lines[] = fgets($fp); }
$c = count($lines);
$i = $c >= $numLines ? $c-$numLines: 0;
for (; $i < $c; ++$i) {
        if ($pos = stripos($lines[$i], $LOGsearchString)) {
                #echo $lines[$i];
                if (preg_match("/(([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}))/", $lines[$i], $match)) {
                        $newIP = $match[1];
                       //echo "newIP: $newIP\n";
                }
        }
}

/* CONFIG FILE */
if (isset($newIP) AND !empty($newIP)) {
        $lines = file($CONF);
        $FoundLineCount = 0;
        foreach($lines AS $line) {
                $FoundLineCount++;
                if (preg_match("/$LOGsearchString/i", $line)) { break; }
        }
        $x = 0;
        foreach($lines AS $line) {
                $x++;
                if ($x > $FoundLineCount AND $x < ($FoundLineCount + 10)) {
                        if (preg_match("/(([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\,(.*))/", $line, $match)) {
                                $old = $match[1]; 
                                echo "old: $old\n";
                                break;
                        }
                }
        }
        $old = explode(",", $old);                    
        $oldIP = $old[0];
        $oldPORT = $old[1];
        //echo "oldIP: $oldIP\n";
        //echo "oldPORT: $oldPORT\n";

        if (!empty($oldIP) AND $newIP !== $oldIP) {
                echo "newIP: $newIP\n";
                echo "oldIP: $oldIP\n";

                echo "sed -i $CONF -e 's|".$oldIP."|".$newIP."|'\n";
                exec("sed -i $CONF -e 's|".$oldIP."|".$newIP."|'");

                exec("pidof oscam", $output, $return_var);
                if (isset($return_var) AND $return_var >= 1) {
                        echo "ERROR: \n";
                        echo exitcode($return_var)."\n";
                        foreach ($output AS $err) { echo $err."\n"; }
                } else {    
                        foreach($output AS $pid) {
                                echo "kill -1 $pid\n";
                                exec("kill -1 $pid", $output, $return_var);
                        }
                        sleep(2);
                        if (isset($return_var) AND $return_var >= 1) {
                                echo "ERROR: \n";
                                echo exitcode($return_var)."\n";
                                foreach ($output AS $err) { echo $err."\n"; }
                        }
                        echo "restart_Reader.sh ".strtolower($LOGsearchString)."\n";
                        exec("/bin/bash restart_Reader.sh ".strtolower($LOGsearchString)."", $output, $return_var);
                        if (isset($return_var) AND $return_var >= 1) {
                                echo "ERROR: \n";             
                                echo exitcode($return_var)."\n";
                                foreach ($output AS $err) { echo $err."\n"; }
                        }
                        sleep(2);
                }
  
// FIXME
echo "OSCAM restart\n";
exec("/bin/bash OSCAM restart", $output, $return_var);                 
foreach($output AS $line) {
        echo "$line\n";
}
exit();

        }
}
?>
Das funktioniert soweit ja auch wunderbar. Also das hier ist nicht das Problem, oscam.server wird korrekt angepasst. -> Nur übernimmt OScam nicht das neue File :outch:

Wenn ich ins OScam-WebInterface gucke steht noch die alte IP im Reader-Eintrag. Trotz restart. Im File steht aber die neue..
Du musst nicht kämpfen um zu siegen
freddchen
IPC Neuling
Beiträge: 4
Registriert: Di 2. Aug 2011, 10:41
Kontaktdaten:

Re: reload oscam.server

Beitrag von freddchen »

weiss nicht obs noch aktuell ist. Geht aber nur, dass alle Reader,User neu eingelesen werden.
Hatte das bei meiner Verwaltung in PHP programmiert.

Code: Alles auswählen

		$pid =  shell_exec('pgrep -x oscam.x86_64');
		$pid = explode("\n",$pid);		
		shell_exec('sudo kill -HUP '.$pid[0]);
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste