cronjob und passendes Script für minidlna

    • cronjob und passendes Script für minidlna

      Hallo,
      ich habe gelesen das der minidlna-clint der Dreambox nicht automatisch alte Einträge löscht.
      Wenn man das erreichen will sollte man ein Script per Cronjob ausführen lassen, dass die Daten des minidlna löscht und den Dienst neu startet.

      Ich bin aber mit sh-scripts und Cronjobs völlig unerfahren.
      Wäre es möglich, dass mich jemand der "alten Hasen" hier Schritt für Schritt dabei unterstützt mir ein solches Script zu erstellen und es ans Laufen zu bringen.
      Ich will kein fertiges Script, aber ich finde nicht wirklich aussagekräftige Info's um mich in die Scripts alleine einzuarbeiten, verstehe das einfach nicht.
      PlugIn's: AMS, Autotimer, Seriesplugin, Cool Guide, Epgrefresh/backup, SerienRecorder, MediaPortal
    • Hallo Schnello,
      Sorry das ich mich jetzt erst melde, hatte in den letzten Tagen diverse i-net-Probleme.

      Also soweit ich weiß wird die Datenbank des Minidlna nicht bereinigt, sondern nur neue Aufnahmen hinzugefügt. Also müsste meines Erachtens die Datenbank täglich gelöscht und neu geschrieben werden, so dass nur die tagesaktuellen Aufnahmen gelistet sind.
      Denke mal so wie ich die Box kennengelernt habe muss der Minidlna-Client vor dem löschen abgeschaltet bzw. gestoppt und nach dem löschen wieder aktiviert werden. Das wär's also im Prinzip schon.

      Also Zusammenfassend:
      a) Minidlna stoppen
      b) Datenbank mit Filezugriff (liegt auf interner HDD) löschen
      c) Minidlna wieder starten.
      d) Ablauf automatisiert zu fester Zeit starten

      Wie gesagt kenne ich mich mit sh-scripten und Crown nicht aus und das was ich bisher zu dem Thema gelesen habe hat mich eher verwirrt als weitergebracht. Zum Beispiel gibt es zu viele unterschiedliche Scriptsprachen, auch habe ich nichts gefunden zum Crownjob selbst (Ist das ein extra Plugin?)
      Wenn du mir erstmal die richtige Scriptsprache zeigen kannst und dann die Syntex erklärst, dann suche ich mir die Befehle raus und fange an zu basteln. Danach müsste ich eben Hilfe beim automatisieren des ablaufs haben.
      PlugIn's: AMS, Autotimer, Seriesplugin, Cool Guide, Epgrefresh/backup, SerienRecorder, MediaPortal
    • PID TTY TIME CMD
      1 ? 00:00:14 init
      2 ? 00:00:00 kthreadd
      3 ? 00:01:54 ksoftirqd/0
      5 ? 00:00:00 kworker/u:0
      6 ? 00:00:08 migration/0
      7 ? 00:00:02 watchdog/0
      8 ? 00:00:03 migration/1
      10 ? 00:01:25 ksoftirqd/1
      12 ? 00:00:01 watchdog/1
      13 ? 00:00:00 khelper
      14 ? 00:00:00 kdevtmpfs
      15 ? 00:00:00 sync_supers
      16 ? 00:00:00 bdi-default
      17 ? 00:00:00 kblockd
      18 ? 00:00:00 ata_sff
      19 ? 00:00:00 khubd
      20 ? 00:00:00 rpciod
      21 ? 00:00:00 khungtaskd
      22 ? 00:00:51 kswapd0
      23 ? 00:00:00 fsnotify_mark
      24 ? 00:00:00 nfsiod
      25 ? 00:00:00 xfs_mru_cache
      26 ? 00:00:00 xfslogd
      27 ? 00:00:00 xfsdatad
      28 ? 00:00:00 xfsconvertd
      29 ? 00:00:00 crypto
      37 ? 00:00:00 scsi_eh_0
      38 ? 00:00:00 scsi_eh_1
      39 ? 00:00:00 kworker/u:1
      46 ? 00:00:00 mtdblock0
      47 ? 00:00:00 mtdblock1
      48 ? 00:00:00 mtdblock2
      49 ? 00:00:00 mtdblock3
      51 ? 00:00:00 ubi_bgt0d
      52 ? 00:00:03 ubifs_bgt0_0
      77 ? 00:00:00 udevd
      89 ? 00:00:00 udevd
      90 ? 00:00:00 udevd
      120 ? 00:00:15 b_event
      121 ? 00:00:00 b_idle
      147 ? 00:00:00 mpeg
      148 ? 00:00:00 mpeg
      163 ? 00:00:00 dmx0
      164 ? 00:00:00 dmx1
      165 ? 00:07:03 dmx2
      166 ? 00:18:51 dmx3
      168 ? 00:01:37 dmx4
      169 ? 00:04:23 dmx_hw_sec
      172 ? 00:00:00 ci0
      173 ? 00:00:00 ci1
      185 ? 00:00:00 ubifs_bgt0_1
      186 ? 00:00:29 kjournald
      254 ? 00:00:24 nmbd
      256 ? 00:00:00 smbd
      276 ? 00:00:00 smbd
      330 ? 00:00:01 rpcbind
      340 ? 00:00:00 wdog
      341 ? 00:00:00 tpmd
      348 ? 00:00:00 dbus-daemon
      508 ? 00:03:48 automount
      552 ? 00:00:00 kworker/1:0
      571 ? 00:00:00 wdog
      572 ? 00:55:15 dbttcd
      576 ? 00:00:01 syslogd
      578 ? 00:00:02 klogd
      586 ? 00:00:00 xinetd
      591 ? 00:00:00 avahi-daemon
      592 ? 00:00:00 avahi-daemon
      595 ? 00:00:00 eDaemon
      676 ? 00:00:00 flush-ubifs_0_0
      743 ? 00:00:00 kworker/1:2
      761 ? 00:00:00 kcdfsd
      820 ? 00:02:22 cifsd
      821 ? 00:00:03 cifsd
      902 ? 00:01:08 clip0
      918 ? 00:00:00 telnetd
      919 pts/0 00:00:00 sh
      921 ? 00:00:00 vsftpd
      923 ? 00:00:00 vsftpd
      924 ? 00:00:00 vsftpd
      926 ? 00:00:00 vsftpd
      942 pts/0 00:00:00 ps
      1323 ? 00:00:00 enigma2.sh
      1419 ? 03:09:49 enigma2
      15281 ? 00:01:24 scam3.59
      30739 ? 00:00:00 flush-8:0
      30748 ? 00:00:02 kworker/0:1
      31290 ? 00:00:34 minidlnad
      32379 ? 00:00:00 kdvb-ad-0-fe-1
      32665 ? 00:00:01 kworker/0:0

      Verrätst du mir auch was die Ausgabe aussagt? Bin mal etwas Neugierig.
      Hab nur die Zeile 31290 gesehen, aber verrät ja nicht was es bedeutet.
      PlugIn's: AMS, Autotimer, Seriesplugin, Cool Guide, Epgrefresh/backup, SerienRecorder, MediaPortal
    • Es ging darum wie man das ganze beenden kann.
      Habe aber einen ganz interessanten Post gefunden:
      dream-multimedia-tv.de/board/i…&postID=123920#post123920

      Hier geht es drum den Minidlna Server von Enigma abzukoppeln und so einzubinden wie man das normal macht auf einem Linux System.
      Das ganze funktioniert auch wie es soll und ... Minidlna erkennt auch von selber wenn es Aufnahmen nicht mehr gibt.

      Das wird dir dann hilfreich sein wenn es darum geht... Minidlna zu stoppen und dann wieder zu starten. Dann reicht einfach einfaches "/etc/init.d/minidlna stop" und "/etc/init.d/minidlna start"

      Als Script sieht das dann so aus zb (usr/script/minidlnacleaner.sh):

      Shell-Script

      1. #!/bin/sh
      2. /etc/init.d/minidlna stop
      3. rm /media/hdd/minidlna/*
      4. /etc/init.d/minidlna start



      Den Crontask richtest du einfach so ein wobei alles zwischen [ und ] eine Taste ist:

      Quellcode

      1. crontab -e [Enter]
      2. [i]

      Jetzt den Crontab eingeben zb für 18:00 (mehr Infos unter http://de.wikipedia.org/wiki/Cron

      Quellcode

      1. 0 18 * * * sh /usr/script/minidlnacleaner.sh
      2. [Esc] [:] [w] [q] [Enter]


      Fertig....


      Grüße

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Schnello ()

    • Hallo Schnello,

      vielen lieben Dank, viel mehr als ich eigentlich wollte was du da geliefert hast.
      Dennoch bleiben ein paar Fragen offen.
      1) Das Script aus dem DMM-Threat ist alternativ oder muss das gemacht werden?
      2) Weiß ich leider immer noch nicht um welche Script-Sprache es sich handelt
      3) richtig, dass die Befehle nicht mit ";" beendet werden müssen wie bei den meisten Scrips (z. B. Java-Script etc.)?
      4) Das mit dem Crontask ist mir noch ein komplettes Rätsel. Wie und wo muss ich den einrichten? Hab mit Cron bisher noch gar nichts gemacht, kenne nur den Namen.
      Muss ich das im Telnet eingeben und dann mit Enter und i bestätigen oder wie meinst du das?
      5) Wofür stehen die 0 bzw. die * genau? Der angegebene Link scheint leider tot zu sein.

      Bin aber auf jeden Fall jetzt ein Stück weiter und werde das Script heute Abend so mal anlegen.

      Grüße
      PlugIn's: AMS, Autotimer, Seriesplugin, Cool Guide, Epgrefresh/backup, SerienRecorder, MediaPortal
    • 1. muss man selbst erstellen und ausführbar machen (Dateirechte 755)
      2. das sind Shell-Schripte, also eine sinnvolle Aneinanderreihung von Shell Befehlen, in dem Fall der Shell sh (bash ginge auch) - ähnlich einer .bat unter Windows. d.h. es muss nichts übersetzt, compiliert werden
      3. ja, der Zeilenvorschub wird auch als Seperator erkannt. das ";" nimmt man, wenn man mehrere Befehle in einer Zeille absetzt - egal ob im Script oder als command über Telnet/ssh
      4. Da hilft Google, da gibt es unzählige Seiten dazu, wo das erklärt wird (auch hier im Forum): <klick> (Wikipedia, Ubunutuusers.de ist ein guter Einstieg)
      5. siehe 4.

      Edit:
      wichtig für die Script Erstellung: Entweder direkt auf der Box mit dem Editor vi (wird bei Erstellung des crontabs verwendet), nano oder joe erstellen - aber 99% der user machen das am PC. Aber Achtung! Unbedingt einen Linux kompatiblen Editor verwenden, wie notepad++, PSPad etc. Ein mit dem Windows Editor erstelltes Script wird nicht funktionieren!

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Fred Bogus Trumper ()

    • muss man selbst erstellen und ausführbar machen (Dateirechte 755)
      Die Frage war eher ob ich das Script zusätzlich verwenden muss oder ob es sich dabei um eine Alternative zu dem Script von Schnello handelt.
      Ich nehme an das Verzeichnis "usr/script/" das Schnello genannt hat verfügt bereits über diese Rechte, oder?

      das sind Shell-Schripte, also eine sinnvolle Aneinanderreihung von Shell Befehlen, in dem Fall der Shell sh (bash ginge auch) - ähnlich einer .bat unter Windows. d.h. es muss nichts übersetzt, compiliert werden
      Das war mir bereits durch meine eigenen Recherchen klar.
      Ich habe allerdings Probleme damit heraus zu finden um welche Shell (es gibt ja offensichtlich mehrere) es sich handelt und ob die Befehle bzw. Syntex der Befehle darin unterschiedlich aussieht.

      Der Link zu den Cronjobs war sehr hilfreich. Das ist auch mal für einen Laien leicht verständlich. Einzige Frage:
      der Befehl crontab -e, den wir einfach in die Konsole eintippen
      Ich nehme an mit Konsole ist in dem Fall Telnet gemeint, oder?

      Ich werde mal heute Abend alles ausprobieren und mich dann melden. Gibt es einen Befehl für ein Ausgabe-/Info-Fenster um etwas am Bildschirm anzuzeigen? Ich habe in der Befehlsübersicht nichts gefunden. Würde dann nämlich das Script zu mindestens zum Testen gerne mit einer Info für den Bildschirm erweitern. Hab da nur echo gefunden, aber das sieht für mich nicht nach einer Bildschirmanzeige aus oder liege ich da falsch? Beim recherchieren bin ich aber auf "dialog --infobox [Text] [Höhe] [Breite]" gestoßen, das müsste es sein, oder?
      PlugIn's: AMS, Autotimer, Seriesplugin, Cool Guide, Epgrefresh/backup, SerienRecorder, MediaPortal
    • Die Frage war eher ob ich das Script zusätzlich verwenden muss oder ob es sich dabei um eine Alternative zu dem Script von Schnello handelt.
      Ich nehme an das Verzeichnis "usr/script/" das Schnello genannt hat verfügt bereits über diese Rechte, oder?


      Im Detail.
      Aktuell sieht es für mich so aus als ob der Service minidlna über das Plugin enigma2-plugin-systemplugins-minidlnasetup gestartet wird. Das hat zur Folge das man a: Es nicht einfach so starten kann aus der Konsole und b. nach meinen Erfahrungen die minidlna.conf immer überschrieben wird.

      Darum...
      opkg remove enigma2-plugin-systemplugins-minidlnasetup

      Resultat:
      Der minidlna Client wird nicht mehr gestartet.



      Jetzt wollen wir aber natürlich den Client starten.
      Dafür ist folgendes Script zuständig /etc/init.d/minidlna:

      Shell-Script

      1. #!/bin/sh
      2. DAEMON=/usr/bin/minidlna
      3. DAEMON=/usr/sbin/minidlnad
      4. NAME=minidlna
      5. DESC="UPnP server"
      6. test -f $DAEMON || exit 0
      7. set -e
      8. case "$1" in
      9. start)
      10. echo -n "* starting $DESC: $NAME... "
      11. start-stop-daemon -S -b -x $DAEMON
      12. echo "done."
      13. ;;
      14. stop)
      15. echo -n "* stopping $DESC: $NAME... "
      16. start-stop-daemon -K -x $DAEMON
      17. echo "done."
      18. ;;
      19. restart)
      20. echo "* restarting $DESC: $NAME... "
      21. $0 stop
      22. $0 start
      23. echo "done."
      24. ;;
      25. *)
      26. echo "Usage: $0 {start|stop|restart}"
      27. exit 1
      28. ;;
      29. esac
      30. exit 0
      Alles anzeigen



      Im Grunde macht es nicht anderes als im Fall von start... den Dienst zu starten.


      Jetzt haben wir aber zwar ein Script... aber wenn wir die Box starten wird das nicht reichen. Darum eine Verlinkung nach rc3.d

      Quellcode

      1. ln -s /etc/init.d/minidlna /etc/rc3.d/S90minidlna


      Alles was in rc3.d (Stichwort runlevel) vorhanden ist wird beim Starten ausgeführt. S10 vor S20... etc.
      So jetzt läuft unser Minidlna Client wieder.. und hier kannst du dann mit einem Crontask per Script eingreifen.

      Ich nehme an mit Konsole ist in dem Fall Telnet gemeint, oder?

      Ja

      Ich habe allerdings Probleme damit heraus zu finden um welche Shell (es gibt ja offensichtlich mehrere) es sich handelt und ob die Befehle bzw. Syntex der Befehle darin unterschiedlich aussieht.

      Das erkennst du aus der shebang (erste Zeile). #!/bin/sh = Shell #!/bin/bash = bash...



      Grüße
    • ln -st /ec/init.d/minidlna /etc/rc3.d/S90minidlna
      Sehe ich das richtig, dass damit das Start/Stop-Script aus "/ec/init.d/" nach "/etc/rc3.d/" verlinkt wird?
      Das S90 ist fix oder nur von dir beispielhaft gewählt um zu zeigen dass ich es hinten an die bestehende Reihe anfügen muss?

      Das erkennst du aus der shebang (erste Zeile). #!/bin/sh = Shell #!/bin/bash = bash
      Den Unterschied habe ich bemerkt. Läuft auf der Dremabox denn immer sh? Sind die Befehle zwischen den verschiedenen Shell's unterschiedlich?
      Sorry, dass ich soviel frage, aber ich möchte es ja lernen.
      PlugIn's: AMS, Autotimer, Seriesplugin, Cool Guide, Epgrefresh/backup, SerienRecorder, MediaPortal
    • Poschi schrieb:


      Ich werde mal heute Abend alles ausprobieren und mich dann melden. Gibt es einen Befehl für ein Ausgabe-/Info-Fenster um etwas am Bildschirm anzuzeigen? Ich habe in der Befehlsübersicht nichts gefunden. Würde dann nämlich das Script zu mindestens zum Testen gerne mit einer Info für den Bildschirm erweitern.


      das geht übers Web-IF: per wget eine Messagebox mit gewünschten Text aufrufen und ins Script einbauen - als Dauerhafte Anzeige oder Ausblenden nach x Sekunden.

      z.B:

      Quellcode

      1. wget -q -O- http://localhost/web/message?text="MiniDNLA-Server%20neu%20gestartet!%0AZeilenumbruch%0ADatenbank%20gesaeubert&type=1&timeout=10"


      sieht dann so aus wie im Anhang (kann auch über die Konsole als ein Befehl getestet werden)

      %20 = Leerzeichen
      %0A = Zeilenumbruch

      mehr dazu: -> dream.reichholf.net/wiki/Enigma2:WebInterface#Message

      Alles was darüber hinausgeht, wäre wohl besser mit python als Plugin. Aber eins nach dem anderen. Als erstes muss das Script mal funktikoniern, und das so einfach wie möglich. Erst dann kommen die "Schnörkel". Zumindest mache ich das immer so.
      Bilder
      • messagebox.png

        27,04 kB, 835×242, 214 mal angesehen
    • @Fred Bogus Trumper
      Geb ich dir vollkommen Recht mit mach ich beim HTML, PHP oder anderem programmieren ja auch so.
      Geht mir in dem Fall nur um eine Bestätigung, dass das Script gelaufen ist, weil es ja im ersten Moment keinen sichtbaren Unterschied darstellt.
      PlugIn's: AMS, Autotimer, Seriesplugin, Cool Guide, Epgrefresh/backup, SerienRecorder, MediaPortal
    • So, hab jetzt mal alles gemacht. Reicht es im Telnet das Script von Schnello einzutippen um mal alles manuell zu starten?

      Dafür ist folgendes Script zuständig /etc/init.d/minidlna:
      Ist es Richtig, dass das Ersatzscript für das Minidlnasetup kein ".sh" am Ende hat?
      PlugIn's: AMS, Autotimer, Seriesplugin, Cool Guide, Epgrefresh/backup, SerienRecorder, MediaPortal
    • Du brauchst das Script nicht abtippen, du kannst es hier markieren und rauskopieren und im (linuxkonformen) Editor deiner Wahl einfügen. Wichtig ist, dass du es ausführbar machst:

      chmod 755 /etc/init.d/minidnla


      De Dateiendung ist egal und ist für die Funktionalität nicht wichtig. Durch die Erweiterung .sh ist nur sofort ersichtlich, dass es sich um ein Shell Script handelt, ohne den Inhalt zu kennen. Ist aber im Grunde nur ein Textfile. Die /etc/init.d Startscripte sind üblicherweise ohne die Erweiterung .sh, weil schon durch den Speicherort klar ist, worum es sich handelt.

      Ich würde das script auch mit update-rc.d hinzufügen anstatt mit dem Symlink (der Befehl: ln -s /etc/init.d/minidlna /etc/rc3.d/S90minidlna), damit bei Runlevel 0 (Ausschalten), 1 (Singleusermode) und 6 (reboot) minidnla auch gestoppt wird
      50, weil ich das nach dem netzwerk starten würde

      update-rc.d minidnla start 50 S . stop 50 0 1 6 .

      wieder entfernen, falls du das wieder deinstalliertst
      update-rc.d -f minidnla remove


      Ob's in den jeweiligen Runlevel hinzugefügt/entfernt wurde kann man so überprüfen (K50minidnla stoppt den demaon im entsprechenden runlevel, S50minidnla wird beim Start ausgeführt)

      Quellcode

      1. root@dm7020hd:~# ls -1 /etc/rc?.d/*minidnla
      2. /etc/rc0.d/K50minidnla
      3. /etc/rc1.d/K50minidnla
      4. /etc/rc6.d/K50minidnla
      5. /etc/rcS.d/S50minidnla
      6. root@dm7020hd:~#


      nach dem remove darf keine Ausgabe mehr kommen, d.h. die Symlinks müssten entfernt worden sein. Wenn nicht, kann man das auch manuell mit rm oder per FTP

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Fred Bogus Trumper ()

    • Ich meinte mit eintippen um das Script einmalig manuell zu starten, fürs erstellen habe ich es sicher kopiert.

      Ich würde das script auch mit update-rc.d hinzufügen, damit bei Runlevel 0 (Ausschalten), 1 (Singleusermode) und 6 (reboot) minidnla auch gestoppt wird
      50, weil ich das nach dem netzwerk starten würde
      Ab hier ist jetzt wieder alles unklar. Kannst du das bitte etwas genauer erklären?
      PlugIn's: AMS, Autotimer, Seriesplugin, Cool Guide, Epgrefresh/backup, SerienRecorder, MediaPortal