MySQL DB mit cronjob updaten
-
Ich habe das MediathekView Plugin in LibreElec laufen. Es benutzt eine MySQL DB (8.0) auf einem Ubuntu-Server.
Das funktioniert eigentlich gut, aber die Performance beim Update der DB (und beim Download von Filmen) könnte besser sein, vornehm gesagt.
Der Grund dafür ist wohl mein Setup:- Die mediathekview DB liegt auf dem Server, der über Ethernet verbunden ist.
- LibreElec läuft auf einem Pi3+ der über Wlan verbunden ist.
- Die Medienverzeichnisse, auch das für die Mediathek-Downloads, liegen auch auf dem Server. Dafür hat der Server eine eigene Partition, die auf dem Pi über nbd (network block device eingehängt ist. Das funktioniert gut.
Die Download-Performance ist eigentlich erträglich. Der Flaschenhals ist der Update der DB: Kodi verbindet sich mit dem Mediathekview-Server (Wlan), holt die Daten und schreibt sie in die DB (wieder Wlan).
Ich sehe zwei Lösungen des Problems;- Die Updates auf dem Pi kann man deaktivieren. Dann soll der Server die DB-Updates regelmäßig machen, über einen cronjob aktiviert. Geht das, und wenn ja, wie? Der Server ist headless und soll es auch bleiben.
- Ich besorge mir einen Switch und spendiere so dem Pi eine Eth-Verbindung statt des Wlans - ist wahrscheinlich einfacher und stabiler, kostet aber nochmal Strom für den Switch.
Was meint ihr?
-
Schau mal in das README unter “Standalone Datenbank”. Dort findest du den Aufruf des Scripts (./mvupdate mysql -H … -P … -u … -p …) welches dann als Cron eingebunden werden kann. Im Client (Pi3) dann natürlich das Update abschalten.
Im Readme gibt es auch noch Erklärungen für Docker, wenn das für dich besser passt. -
@codingPF
Vielen Dank, das war sehr hilfreich!Ich hatte die README schon gelesen, aber wohl nicht genau genug. Den Part, dass man das ganze Plugin-Verzeichnis auf den Server kopieren muss und dann ja mit installiertem Python die Update-Prozedur ausführen kann, habe ich glatt missverstanden und übergangen (das sah so nach Kodi-Plugin aus).
Merkwürdig: ein voller Update hat super funktioniert, nun bekomme ich bei jedem Aufruf die Meldung
2024-02-13 16:39:11.974334 ERROR [mvupdate3-0.0]: Unable to find version information: ParseError not well-formed (invalid token): line 1, column 1
Der Updater scheint aber zu tun, was er soll.
Folgendes ist mir noch aufgefallen:
Gibt man den Parameter -H localhost an, gibt es eine Exception. Ohne -H funktioniert es für localhost.Für Nachahmer:
mvupdate3 muss ja im Pluginverzeichnis aufgerufen werden, sonst geht’s nicht. Also schiebe ich den ganzen Inhalt des Pluginverzeichnissses nach ~/.mvupdate und mache folgende Prozedur:#!/bin/bash cd /home/mylogin/.mvupdate ./mvupdate3 mysql $1 -u myuser -p mypass 2> /home/mylogin/.mvupdate/upd.log
Die crontab schaut dann so aus:
0 4 * * * /home/mylogin/.mvupdate/mvupdate -F */30 9-23 * * * /home/mylogin/.mvupdate/mvupdate -f
Also wird alle 30 Minuten zwischen 8:00 und 24:00 ein kleiner Update und um 04:00 ein voller Update gemacht.
So läuft das erst mal perfekt und ich spare mir weiter den Switch. -
Deine Probleme schau ich mir mal an - ich benutze das Feature selbst nicht. Wenn du weitere findest, dann mach bitte ein GIT Issue auf - dort ist es besser aufgehoben.
Zu deinem Setup:
Die Filmliste wird nur ein Mal pro Stunde erstellt. Ein 30 min Intervall somit nicht nötig/sinnvoll.
Du musst/solltest auch nicht mit -f -F arbeiten. Wenn du die Parameter weg nimmst, sollte er jede Stunde Updates ziehen und morgens um 5 ein komplettes Update machen. Prüfen/Aufrufen kannst du dann auch in kürzeren Intervallen. Also einfach mal Parameter (-f / -F) löschen und schauen was passiert. Mit -v (-v -v -v) gibs auch logs… -
UPDATE
Prozedur mvupdate
#!/bin/bash cd $HOME/.mvupdate ./mvupdate3 mysql [-v -v] -u myuser -p mypass [>>upd.log 2>&1]
Die Debug-Ausgabe und das Schreiben einer Logdatei kann man sich sparen, wenn alles läuft.
Die Prozedur muss ausfphrbar sein.
Die crontab schaut so aus:0 4 * * * $HOME/.mvupdate/mvupdate 0 9-23 * * * $HOME/.mvupdate/mvupdate
Also wird jede zwischen 9:00 und 23:00 ein kleiner Update und um 04:00 ein voller Update gemacht.
Falls die Updates um eine Stunde nach vorn verschoben sind, dann hat cron UTC als Zeitzone. Das kann man wie folgt ändern:
Trage in die Datei /etc/default/cron folgende Zeile ein:TZ="Europe/Berlin"
und starte cron neu.
-