Seite 1 von 1
reload oscam.server
Verfasst: Fr 27. Feb 2015, 17:04
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
Weiß jemand die ich das beheben kann?
(möchte vermeiden OScam komplett neu zu starten)
Re: reload oscam.server
Verfasst: Fr 27. Feb 2015, 19:20
von Alx83
Re: reload oscam.server
Verfasst: Sa 28. Feb 2015, 07:23
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
Re: reload oscam.server
Verfasst: Di 3. Mär 2015, 19:53
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
Re: reload oscam.server
Verfasst: Di 3. Mär 2015, 21:27
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
Re: reload oscam.server
Verfasst: Di 3. Mär 2015, 22:02
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.
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?
Re: reload oscam.server
Verfasst: Mi 4. Mär 2015, 06:39
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
Re: reload oscam.server
Verfasst: Mi 4. Mär 2015, 15:42
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
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
Wenn ich ins OScam-WebInterface gucke steht noch die alte IP im Reader-Eintrag. Trotz restart. Im File steht aber die neue..
Re: reload oscam.server
Verfasst: Mo 11. Mai 2015, 21:47
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]);