Ich bau es grade vollständig um, dass es alles automatisch macht und du nur noch die ServerIDs bzw. Ports zum ignorieren eintragen musst.
Beiträge von Sebbo
-
-
Stimmen tut das mehr oder weniger schon, aber dein Tipp ist auch sehr hilfreich.
Vielen Dank für die Info und das Feedback!
-
Doch, beides wurde erlaubt. Maximal jedoch 1 MB.
-
Leider kann man hier keine .rar hochladen
Jetzt schon. -
Vom Prinzip ist es das selbe wie der JTS3ServerMod nur etwas komplexer, mit mehr Funktionen und verknüpft mit einer Statistikdatenbank. So sieht es für mich jedenfalls grade aus.^^
-
Also laut der README sollte das ja ganz leicht sein...
ZitatINSTALLATION
- Download and unzip the contents to a server / directory of your choice.
- Open rbm_settings.cf and change the first few options for your server setup.
- Copy the contents of /rbm_icons/* to your TS3 virtual server.
'.../teamspeak/files/virtualserver_1/internal/icons' for example.
Please go through the settings.cf features and select the corresponding icon pack or
leave the entire icon pack off your virtual server if disabling a particular feature.
- Make sure rbmod.pl is set to 744 (executable) and run #: ./rbmod.plUnd die Konfig muss man eben Schritt-für-Schritt durchgehen...
-
Sorry, hab da was vergessen...
Du musst diese Zeile...
...durch diese hier setzen und dabei aber die IP-Adresse, sowie den ServerQuery Port deines TeamSpeak 3 Servers angeben:Zudem habe ich einmal vergessen, das Objekt "ts3admin" mit an zu geben. Ich habe den Code oben nochmal aktualisiert: Gewisse Server ID nach XXX Stunden löschen?
Danach sollte alles funktionieren...
-
Hallo,
gibt es dazu vielleicht auch einen Link, damit es sich andere User mal anschauen und probieren könnten? -
Stimmt, sonst könnte jeder seinen Server bei 4 Stunden neustarten und er würde nie die 5 Stunden online sein. Danke für den Hinweis, @ScP!
Hab's oben gleich mal angepasst.
-
Du musst die ts3admin.class downloaden: ts3admin.class
...und in dem von mir oben geschriebenen Pseudocode einbinden:
Danach sollte es für den einen Server jedenfalls was anzeigen. Wenn du es für mehrere machen willst, musst du dir einfach mit der ts3admin.class die serverList() anzeigen lassen und für jeden erhaltenen Server alle Schritte machen. Stichwort: foreach()-Schleife
-
Hallo,
du kannst mit Hilfe der ts3admin.class oder per ServerQuery eben die Virtuellen Server-Informationen auslesen und die Zeit, die der Server online ist, auswerten: ts3admin.class: serverInfo() => virtualserver_uptime
Und mit Hilfe einer anderen Funktion/Methode kannst du diese Uptime wiederum konvertieren, sodass sie verständlicher ist. Zum Beispiel nach 5d 2h 1m 26s.
(Der nachfolgende Code ist der aktuelle! Er wurde immer wieder direkt editiert, sowie geprüft/getestet und im Verlauf des Themas lediglich verlinkt.)
Vollständig funktionierender Code:
PHP
Alles anzeigen<?php require_once("ts3admin.class.php"); /**************************** Konfiguration ****************************/ /* IP-Adresse der TeamSpeak Instanz Beispiel: $instance['IP'] = '192.168.2.10'; */ $instance['ip'] = ""; /* ServerQuery-Port für die Instanz Beispiel: $instance['serverQueryPort'] = 10011; */ $instance['serverQueryPort'] = 10011; /* User, der die Server dann loeschen soll und kann Beispiel: $instance['user'] = 'serveradmin'; */ $instance['user'] = "serveradmin"; /* Passwort für den User-Login Beispiel: $instance['password'] = 'sehrGeheimes$Passwo!rt'; */ $instance['password'] = ''; /* Bestimmung der Uptime-Zeitangabe: Stunden oder Tage Beispiel: $uptime['type'] = "hours"; Moegliche Werte: days, hours, minutes, seconds */ $uptime['type'] = "hours"; /* Maximale Uptime bzw. Lebensdauer der virtuellen TeamSpeak Server Beispiel: $uptime['duration'] = 5; */ $uptime['duration'] = 5; /* SIDs, die vom Skript ignoriert werden sollen Beispiel: $ignoreSIDs = array(1, 22, 231, 450, 54); */ $ignore['SIDs'] = array(); /* Ports, die vom Skript ignoriert werden sollen Beispiel: $ignorePorts = array(9987, 9988, 9993); */ $ignore['ports'] = array(); /**************************** Konfiguration ENDE ****************************/ /************************** * * * AB HIER NICHTS AENDERN! * * * **************************/ /* Wenn eines der $ignore-Arrays leer ist, fuelle es mit einer 0, die nicht genutzt wird */ if(empty($ignore['SIDs'])) { $ignore['SIDs'] = array(0); } if(empty($ignore['ports'])) { $ignore['ports'] = array(0); } $ts3admin = new ts3admin($instance['ip'], $instance['serverQueryPort']); if($ts3admin->getElement('success', $ts3admin->connect())) { $ts3admin->login($instance['user'], $instance['password']); /* Hole eine Liste aller virtuellen TeamSpeak Server */ $serverList = $ts3admin->serverList(); if($serverList['success']) { /* Fuer jeden virtuellen TeamSpeak Server... */ foreach($serverList['data'] as $key => $value) { /* Ist der virtuelle Server in einer $ignore-Liste? */ if(!in_array($value['virtualserver_id'], $ignore['SIDs']) AND (!in_array($value['virtualserver_port'], $ignore['ports']))) { /* Selektiere Server-ID */ $ts3admin->selectServer($value['virtualserver_id'], 'serverId'); /* serverInfo() vom Server mit der SID $value['virtualserver_id'] holen */ $serverInfo = $ts3admin->serverInfo(); /* Aktuelle Zeit - Erstellungsdatum des virtuellen Servers */ $uptimeTimestamp = time() - $serverInfo['data']['virtualserver_created']; /* Doc: http://ts3admin.info/manual/classes/ts3admin.html#method_convertSecondsToArrayTime */ $uptimeTS = $ts3admin->convertSecondsToArrayTime($uptimeTimestamp); /* Wenn die Uptime gleich oder hoeher als $uptime['duration'] ist, dann..., sonst... */ if($uptimeTS[$uptime['type']] >= $uptime['duration']) { /* Server ist laenger oder gleich 5 Stunden online */ if($serverInfo['data']['virtualserver_status'] == "online") { if($ts3admin->serverStop($value['virtualserver_id'])) { if($ts3admin->serverDelete($value['virtualserver_id'])) { $deleteTeamSpeakServerMsg = 'Der TeamSpeak Server <b>' . $value['virtualserver_name'] . '</b> (SID ' . $value['virtualserver_id'] . ', Port ' . $value['virtualserver_port'] . ') wurde erfolgreich gestoppt, sowie vollstaendig geloescht!'; } else { $deleteTeamSpeakServerMsg = 'Der TeamSpeak Server <b>' . $value['virtualserver_name'] . '</b> (SID ' . $value['virtualserver_id'] . ', Port ' . $value['virtualserver_port'] . ') konnte nicht geloescht werden!'; } } else { $deleteTeamSpeakServerMsg = 'Der TeamSpeak Server <b>' . $value['virtualserver_name'] . '</b> (SID ' . $value['virtualserver_id'] . ', Port ' . $value['virtualserver_port'] . ') konnte nicht gestoppt und somit auch nicht geloescht werden!'; } } else { if($ts3admin->serverDelete($value['virtualserver_id'])) { $deleteTeamSpeakServerMsg = 'Der TeamSpeak Server <b>' . $value['virtualserver_name'] . '</b> (SID ' . $value['virtualserver_id'] . ', Port ' . $value['virtualserver_port'] . ') wurde erfolgreich gestoppt, sowie vollstaendig geloescht!'; } else { $deleteTeamSpeakServerMsg = 'Der TeamSpeak Server <b>' . $value['virtualserver_name'] . '</b> (SID ' . $value['virtualserver_id'] . ', Port ' . $value['virtualserver_port'] . ') konnte nicht geloescht werden!'; } } } else { /* Server ist kuerzer als 5 Stunden online */ $deleteTeamSpeakServerMsg = 'Es wurde nichts gemacht.'; } } else { $deleteTeamSpeakServerMsg = 'Es wurde nichts gemacht.'; } /* Was wurde getan? Meldung pro Server ausgeben. */ echo $deleteTeamSpeakServerMsg; } } else { echo 'Es gibt keine Server auf dieser Instanz!'; } } else { echo 'Es konnte keine Verbindung zur TeamSpeak Server Instanz aufgebaut werden! Bitte ueberpruefe deine Konfigurationsdaten!'; } ?>
-
Hallo,
@Thomas hat hier vor kurzem einen Blog-Eintrag verfasst: Teamspeak Laggs auf den Grund gehen | TS-Coach
Was genau hast du denn vor bzw. was ist dein Ziel/Vorhaben? Die Daten, die du benötigst, müssten wenn dann in der folgenden Funktion/Methode auf zu finden sein: ts3admin.class: clientInfo()
-
Oh, okay. Schade. Naja. Vielleicht findet sich ja eine Lösung.
-
Hallo,
in dem Tutorial TeamSpeak 3 Server mit ts3server.ini konfigurieren findest du diese Information.Du musst hier
eintragen."localhost" verweist auf die IP-Adresse 127.0.0.1 und wenn du in deiner INI eine 192.168.178.20 z.B. angegeben hast, dann lauscht die Query-Verbindung nur auf dieser IP und dadurch ist es auch nicht möglich, dich mit "localhost" zu verbinden. Du könntest in der "/etc/hosts" jedoch den localhost Eintrag wie folgt ab ändern:
Code$ cat /etc/hosts 192.168.178.20 localhost 127.0.0.1 localhost 127.0.1.1 teamspeak # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Ob das jedoch sinnvoll ist, wäre eine andere Frage. Ich würde es persönlich nicht machen und lieber die 0.0.0.0 IP als query_ip setzen. -
Hi @Pauschi,
hast du schon eine Lösung gefunden oder hast du aufgegeben? Mich würde mal interessieren, ob das möglich ist oder nicht.
-
Hallo,
was ist denn hier der aktuelle Stand? Das Thema wurde nämlich noch nicht als erledigt markiert, daher wollte ich mal wissen, ob noch Infos benötigt werden oder alles geklärt ist.
-
Haben sich inzwischen bereits ein paar gemeldet oder hast du immer noch so viele Ressourcen übrig?
-
Hi @PuniHasstEuch,
hast du hierzu noch eine Frage oder hast du alle Infos? Wäre nett, wenn du das Thema dann entsprechend "Als erledigt markierst" oder eben noch weitere Fragen etc. schreibst.
-
Hallo,
ich habe ein PHP-Skript gebaut, welches ein paar Werte berechnet und sie in der Datenbank entsprechend aktualisiert, also updated.
Das funktioniert auch einwandfrei und ohne Probleme. Auch die Fließkommazahlen werden korrekt ausgerechnet.
Aber sobald ich es in einen Cronjob, wie diesen hier packe...
Code$ cat /etc/cron.d/berechnungPATH=/usr/local/bin:/usr/bin:/bin18 18 * * * web12 php /var/www/berechnung.php# ^ ^ ^ ^ ^# | | | | |# | | | | |___ Weekday (0-7, Sunday is mostly 0)# | | | |_____ Month (1-12)# | | |_______ Day (1-31)# | |_________ Hour (0-23)# |___________ Minute (0-59)
...funktioniert es nicht mehr. Es zieht z.B. anstatts 0,54 einfach so viel ab, dass am Schluss immer ein Integer Wert, also z.B. 16.00 in der Datenbank erscheint. Das Array erhält aber nach vielen Tests und beim Aufruf über eine Webseite immer die korrekten Werte...Ich hatte mir mal eine Ausgabe der Arrays, die zu aktualisieren sind, per Mail zukommen lassen, da ich sonst ja keinen Inhalt bzw. keine Ausgabe vom Cronjob sehe:
ZitatPHP Deprecated: Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/ming.ini on line 1 in Unknown on line 0
<pre>Array
(
[wert] => 11,92
)
</pre><pre>Array
(
[wert] => 20
)
</pre>PHP Warning: mysqli::close(): Couldn't fetch mysqli in /var/www/class/mysqli.class.php on line 49Jetzt ist eben die Frage... Warum erhalte ich hier im Array ein Komma im Wert und überall anders nicht? Das muss für Datenbank nämlich ein Punkt sein...
Wenn ich es auf der Shell oder im Browser aufrufe, gibt er mir das Array korrekt zurück:
Zitat$ php berechnung.php
PHP Deprecated: Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/ming.ini on line 1 in Unknown on line 0
<pre>Array
(
[wert] => 9.92
)
</pre><pre>Array
(
[wert] => 20
)
</pre>PHP Warning: mysqli::close(): Couldn't fetch mysqli in /var/www/class/mysqli.class.php on line 49Um es aktuell überhaupt mal zum Laufen zu kriegen, ersetze ich in den Arrays jetzt einfach alle Komma-Zeichen durch einen Punkt:
Die mysqli.class.php sieht wie folgt aus:
Code
Alles anzeigen<?PHP /** * Funktionen für die MySQLi Verbindung * @author par0noid * @package MySQLi * @copyright Since 2014 by par0noid aka Stefan Z. * @link https://par0noid.info/ */ class SQLCommander { /** * Socket/Datenbankverbindung zurück setzen * @author par0noid * @package MySQLi */ private $sock = null; /** * Verbindung zur Datenbank aufbauen * @author par0noid * @package MySQLi * @example * <code> * $SQLCommander = new SQLCommander(); * $SQLCommander->__construct('host', 'username', 'password', 'database', 'db_port'); * </code> * @return string database link or error */ public function __construct($host = 'localhost', $username = 'user', $password = 'verySecret$Password!2014', $database = 'dbExample', $port = 3306) { $this->sock = new mysqli($host, $username, $password, $database, $port); if ($this->sock->connect_errno) { $this->sock = null; } } /** * Verbindung der Datenbank schließen * @author par0noid * @package MySQLi * @example * <code> * $SQLCommander = new SQLCommander(); * $SQLCommander->__destruct(); * </code> * @return boolean true or false */ public function __destruct() { $this->sock->close(); } /** * Setzt den Zeichensatz der MySQLi Verbindung * @author par0noid * @package MySQLi * @example * <code> * $SQLCommander = new SQLCommander(); * $SQLCommander->charset("utf8"); * </code> * @return boolean true or false */ public function charset($cs = 'utf8') { //Charsets: http://dev.mysql.com/doc/refman/5.6/en/charset-charsets.html if (!$this->sock->set_charset($cs)) { return false; } else { return true; } } /** * Liefert einen SELECT Datensatz aus der Datenbank * @author par0noid * @package MySQLi * @example * <code> * $SQLCommander = new SQLCommander(); * $SQLCommander->fetch("SELECT id,Name FROM tblExample WHERE id='1'"); * </code> * @return array data record */ public function fetch($query) { if($this->sock != null) { $result = $this->execQuery($query); $row = $result->fetch_assoc(); $result->free_result(); return $row; }else{ return false; } } /** * Liefert alle SELECT Datensätze aus der Datenbank * @author par0noid * @package MySQLi * @example * <code> * $SQLCommander = new SQLCommander(); * $SQLCommander->fetchAll("SELECT id,Name FROM tblExample"); * </code> * @return array all data records */ public function fetchAll($query) { if($this->sock != null) { $result = $this->sock->query($query); $data = array(); while($row = $result->fetch_assoc()) { $data[] = $row; } $result->free_result(); return $data; }else{ return false; } } /** * Gibt die Anzahl der gefunden SELECT Datensätze zurück * @author par0noid * @package MySQLi * @example * <code> * $SQLCommander = new SQLCommander(); * $SQLCommander->num("SELECT COUNT(id) FROM tblExample"); * </code> * @return integer count of rows or false */ public function num($query) { if($this->sock != null) { $result = $this->execQuery($query); return $result->num_rows; }else{ return false; } } /** * Speichert einen Datensatz in der Datenbank * @author par0noid * @package MySQLi * @example * <code> * $SQLCommander = new SQLCommander(); * $SQLCommander->insert("tblExample", "$array_with_data"); * </code> * @return boolean true or false */ public function insert($table, $data) { if($this->sock != null) { $keys = array(); $values = array(); foreach($data as $key => $value) { $keys[] = '`'.$this->escape($key).'`'; $values[] = "'".$this->escape($value)."'"; } return $this->query("INSERT INTO `".$this->escape($table)."` (".implode(", ", $keys).") VALUES (".implode(", ", $values).")"); }else{ return false; } } /** * Aktualisiert einen oder mehrere Datensätze * @author Sebbo * @package MySQLi * @example * <code> * $SQLCommander = new SQLCommander(); * $SQLCommander->update("tblExample", "$array_with_data"); * </code> * @return boolean true or false */ public function update($table, $data, $where = '') { if($this->sock != null) { $updates = array(); foreach($data as $key => $value) { $updates[] = "`".$this->escape($key)."` = '".$this->escape($value)."'"; } return $this->query("UPDATE `".$this->escape($table)."` SET ".implode(", ", $updates).($where != '' ? ' WHERE '.$where : '')); }else{ return false; } } /** * Löscht einen oder mehrere Datensätze * @author par0noid * @package MySQLi * @example * <code> * $SQLCommander = new SQLCommander(); * $SQLCommander->delete("tblExample", "id=1"); * </code> * @return boolean true or false */ public function delete($table, $where = '') { if($this->sock != null) { return $this->query("DELETE FROM `".$this->escape($table)."` ".($where != '' ? 'WHERE '.$where : '')); }else{ return false; } } /** * Gibt die Anzahl der berührten Datensätze zurück * @author par0noid * @package MySQLi * @example * <code> * $SQLCommander = new SQLCommander(); * $SQLCommander->query("SELECT Name FROM tblExample"); * </code> * @return integer count of touched rows or false */ public function query($query) { if($this->sock != null) { $result = $this->execQuery($query); $num = mysqli_affected_rows($this->sock); return $num; }else{ return false; } } /** * Escapet spezielle Zeichen eines Querys * @author par0noid * @package MySQLi * @example * <code> * $SQLCommander = new SQLCommander(); * $SQLCommander->escape("INSERT INTO tblExample (Name) VALUES ('Max-Peter Mustermann')"); * </code> * @return boolean true or false */ public function escape($input) { if($this->sock != null) { return $this->sock->real_escape_string($input); }else{ return false; } } /** * Führt einen beliebigen Query aus * @author par0noid * @package MySQLi * @example * <code> * $SQLCommander = new SQLCommander(); * $SQLCommander->execQuery("SELECT Name FROM tblExample"); * </code> * @return array result of query */ private function execQuery($query) { return $this->sock->query($query); } } ?>
-
Schon wen gefunden?