Iteration eigener Skripte

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Iteration eigener Skripte

      Ich habe zwei Skripte geschrieben die ich über bspw einen Cron daemon täglich einmal ausführen lassen will.
      Finde hier zu nichts auf dem Feed. Kann mir jemand behilflich sein was es zu installieren gilt? Mit grafischer Oberfläche wäre gut.
      :: d-box-2 ::
      :: Dreambox 7000-S ::
      :: Dreambox One & Two ::
    • hier ist ganz gut beschrieben wie man cronjobs erstellt: wiki.ubuntuusers.de/Cron/

      es gibt auch 100er weitere gute Seiten auf deutsch und vor allem englisch wie man cronjobs erstellt und was man beachten muss

      worauf man achten muss und worauf oft vergessen wird: Wenn ein cronjob ausgeführt führt wird, wird die shell Umgebungsvariable PATH nicht eingelesen, d.h. es wird unter Umständen ein command nicht gefunden, weil die absolute Pfadangabe fehlt.

      einfaches Bespiel:


      /usr/script/example.sh


      #!/bin/bash
      echo "Hello World" > /tmp/script.log
      exit 0


      in der shell ausgeführt funktioniert das script, aber nicht wenn es per cronjob ausgeführt wird.
      Grund: im cronjob wird der command echo nicht gefunden, weil er nicht weiß, wo er den command "suchen" soll.

      Lösung:
      eimmer die absoluten Pfade zum Programm angeben, also statt echo "Hello World" den Pfad mitgeben: /bin/echo "Hello World"



      das ist auf Dauer und vor allem bei umfangreicheren Scripten mühsam. Einfacher ist es im Script oder gleich im crontab die Umgebebungsvariabe PATH zu definieren. Den Inhalt von PATH bekommt man einfach raus (ACHTUNG: meine PATH Variable weicht von der Newnigma2 default Variable ab! /usr/local/script etc. wird bei euch fehlen)

      Quellcode

      1. root@dm900:~# echo $PATH
      2. /usr/script:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/script
      3. root@dm900:~#




      die so erhalte Variable trägt man in der crontab vor den eigenlichen crontabs ein, dann weiß der crontab, wo er die commands suchen soll. Man kann auch zusätzliche Pfade getrennt durch einen Doppelpunkt angeben - sieht dann etwa so aus:

      Quellcode

      1. root@dm900:~# crontab -l
      2. # cronie crontabs
      3. PATH=/usr/script:/usr/local/bin:/usr/local/script:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
      4. ## Minute|Stunde|Tag des Monats|Monat|Wochentag
      5. 30 7 * * * ether-wake -b F4:4D:30:XX:XX:XX
      6. 0 4,16 * * * echo "$(date): $(smartctl -a /dev/disk/by-uuid/5d04ee3d-31ca-4d23-abf6-143cf6b28a92|grep ^193)" > /media/sd/HDD_Load_Cycle_Count.log
      7. 0 5 1,15 * * newnigma2-flashbackup.sh >> /tmp/newnigma2-flashbackup.log
      8. root@dm900:~#
      Alles anzeigen
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

      ¯\_(ツ)_/¯

      Quellcode

      1. root@dm920:~$ mount | grep "/ "
      2. /dev/mmcblk1p1 on / type ext4 (rw,relatime,data=ordered)
      3. root@dm920:~$

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

    • m0rphU schrieb:

      cronie oder systemd units wären meine Lösungen der Wahl. Da gibt es aber keine einfachen GUI Tools
      Ich habe gestern das GP4 auf DreamOS getestet. Hier gibt es ein GUI für cronie. Man muss hier lediglich das Intervall der *.sh festlegen und beide Scripte laufen erfolgreich ab. Kinderleicht kann man sagen.
      Wäre es möglich dieses Feature bei nn2 anzubieten?

      @Fred
      Danke für deine Ausführungen. So einfach wie es dir erscheint, ist es für mich nicht.
      Ich begreife nicht wie ich in crontab die Umgebebungsvariabe PATH zu definieren habe. Zudem kommt noch hinzu dass mich die Nennung "deiner" PATH Variable nebst der nn2 Variante mehr als verwirrt.

      V.a. verstehe ich die Struktur davon nicht:

      Quellcode

      1. root@dm900:~# echo $PATH
      2. /usr/script:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/script
      Wie ist dies bei nn2 anzuwenden?





      :: d-box-2 ::
      :: Dreambox 7000-S ::
      :: Dreambox One & Two ::
    • du gibst folgenden command in der Konsole ein:

      Quellcode

      1. echo $PATH

      Dann kopierst du einfach die Ausgabe in die crontab Datei vor den crontabs. In der Ausgabe werden die Ordner gelistet, in denen die shell nach dem Befehl sucht, den du eingibst. Wenn er in diesen Ordnern dieses Programm (binarie) oder auch script nicht findet, gibt es eine Fehlermeldung und der Befehl wird nicht ausgeführt

      in der Cron Umgebung wird diese Shell Variable PATH nicht eingelesen, also fügen wir sie einfach hinzu, indem wir die Ausgabe von echo $PATH in die crontab Datei einfügen, damit beim Ausführen des Crontabs die Befehle auch in den Standard Ordnern gesucht wird. Du stellst einfach ein "PATH=" davor

      Wenn du nicht weisst, wie man einen crontab über die Konsole erstellt wird es schwierig
      grundsätzlich funktioniert das so:

      crontab -e

      es wird der default Text Editor im Terminal geöffnet, das ist meist nano, weil er einfacher in der Bedienung als vi ist
      dann gibt du die gewünschten crontabs oder eben auch die PATH Variable an, speicherst die Änderung startest den cron dienst neu damit die Änderung eingelesen wird


      Alternativ zu crontab -e kannst du die crontab Datei über FTP mit einem Linux konformen Editor am PC editieren (notepad++, pspad etc.) - das ist für viele angenehmer in der Bedienung.


      busybox-cron
      Standardmäßig ist im DreamOS, also auch im Newnigma2, busybox-cron vorinstalliert aber per default nicht aktiviert. Zudem ist busybox-cron etwas buggy, ein paar Sachen funktionieren nicht wie gewünscht, 99% der user werden das aber nicht merken.

      Zuerst musst du busybox-cron aktivieren (und starten), damit der Dienst auch beim booten gestartet wird, das muss nur einmal geschehen

      systemctl enable busybox-cron.service
      systemctl start busybox-cron.service


      die Konfigurationsdatei in der die crontabs gespeichert werde lautet: /etc/cron/crontabs/root

      falls es die Datei root nicht gibt, kannst man sie manuell erstellen und anschließen über FTP editieren:

      touch /etc/cron/crontabs/root

      Die sieht bei mir so aus (default DreamOS PATH Variable)


      Quellcode

      1. root@dm900:~# cat /etc/cron/crontabs/root
      2. #busybox-cron
      3. PATH=/usr/script:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
      4. root@dm900:~#

      nach dem Editieren busybox-cron neu einlesen bzw. neu starten damit die Änderungen übernommen werden


      systemctl restart busybox-cron.service




      cronie
      Im Newnigma2 kannst du alternativ cronie nachinstallieren:

      apt-get update
      apt-get install cronie


      der cron daemon läuft nach der Installation bereits und muss auch nicht aktiviert werden, damit der Dienst nach einem reboot gestartet wird. Das wird bereits bei der Installation erledigt

      die cronie crontabs werden in /var/spool/cron/root gespeichert, wenn man diese über FTP editieren will. (In älteren Newnigma2 bzw. cronie Versionen in /var/cron/tabs/root)


      Wenn man es in der Konsole linuxkonform mit crontab -e macht, wird automatisch nach der Installation von cronie diese Datei editiert.

      d.h. crontab -l und cat /var/spool/cron/root liefert das selbe Ergebnis

      Cronie: crontab -l vs cat /var/spool/cron/root

      Quellcode

      1. root@dm900:~# crontab -l
      2. # cronie crontabs
      3. PATH=/usr/script:/usr/local/bin:/usr/local/script:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
      4. ## Minute|Stunde|Tag des Monats|Monat|Wochentag
      5. 30 7 * * * ether-wake -b F4:4D:30:XX:XX:XX
      6. 0 4,16 * * * echo "$(date): $(smartctl -a /dev/disk/by-uuid/5d04ee3d-31ca-4d23-abf6-143cf6b28a92|grep ^193)" > /media/sd/HDD_Load_Cycle_Count.log
      7. 0 5 1,15 * * newnigma2-flashbackup.sh >> /tmp/newnigma2-flashbackup.log
      8. root@dm900:~#


      Quellcode

      1. root@dm900:~# cat /var/spool/cron/root
      2. # cronie crontabs
      3. PATH=/usr/script:/usr/local/bin:/usr/local/script:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
      4. ## Minute|Stunde|Tag des Monats|Monat|Wochentag
      5. 30 7 * * * ether-wake -b F4:4D:30:XX:XX:XX
      6. 0 4,16 * * * echo "$(date): $(smartctl -a /dev/disk/by-uuid/5d04ee3d-31ca-4d23-abf6-143cf6b28a92|grep ^193)" > /media/sd/HDD_Load_Cycle_Count.log
      7. 0 5 1,15 * * newnigma2-flashbackup.sh >> /tmp/newnigma2-flashbackup.log
      8. root@dm900:~#





      Den crond Dienst nach der Änderung neu starten

      systemctl restart crond.service




      Es ist möglich, busybox-cron und cronie gleichzeitig laufen zu lassen, aber wozu?


      Wenn du öfters das Image welchselst solltest du vielliecht busybox-cron verwenden, dann kannst du die crontabs einfach kopieren
      die busybox-cron crontabs sind mit anderen images kompatibel, d.h. du musst nur die Datei /etc/cron/crontabs/root sichern und wiederherstellen

      Wenn du die busybox-cron tabs in cronie "importieren" willst, muss du den Inhalt von /etc/cron/crontabs/root nach /var/cron/tabs/root kopieren - oder umgekehrt




      cronie gibt es meines Wissens nur am Newnigma2 Feed und ist die bessere Wahl ;)


      cron GUI Konfigurations Werkzeuge sind im Newnigma2 Image nicht vorhanden


      Vielleicht konnte ich etwas Licht Dunkel bringen ....










      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

      ¯\_(ツ)_/¯

      Quellcode

      1. root@dm920:~$ mount | grep "/ "
      2. /dev/mmcblk1p1 on / type ext4 (rw,relatime,data=ordered)
      3. root@dm920:~$

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

    • Guten Morgen,
      ein etwas älteres Thema aber ich häng mich hier mal dran weil es mein Problem trifft.
      Folgende Ausgangslage: DM900 mit Newnigma.
      Ich möchte das Script "xyz.sh", welches in usr/script liegt mit dem booten starten.
      Ich habe cronie installiert mit:
      apt-get update
      apt-get install cronie
      Ab hier komme ich nicht klar. Im Beitrag oben von Fred Bogus Trumper stehen für mich zwei gegensätzliche Aussagen.
      "die cronie crontabs werden in /var/spool/cron/root gespeichert"

      und weiter unten
      "Wenn du die busybox-cron tabs in cronie "importieren" willst, muss du den Inhalt von /etc/cron/crontabs/root nach /var/cron/tabs/root kopieren - oder umgekehrt"


      Ich habe beide Möglichkeiten probiert
      unter /var/spool/cron/root habe ich "@reboot /usr/script/xyz.sh" eingerichtet

      Dienst neu gestartet

      systemctl restart crond.service
      funktioniert nicht.


      Ich habe

      /var/cron/tabs/ eingerichtet -diese Ordnerstruktur existierte bei mir nicht- und hier unter root "@reboot /usr/script/xyz.sh"

      Dienst neu gestartet
      systemctl restart crond.service
      funktioniert aber auch nicht.
      Derzeit weiß ich nicht weiter.

      Danke an alle Wissenden/Helfenden
      Batan

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

    • cron ist nicht notwendig, das busybox cron ist buggy bzw. kann ein paar sachen nicht -alternativ cronie vom feed installieren

      Aber führ das script über die /etc/rc.local aus - die wird einmalig beim boot ausgeführt
      das service läuft bereits nach dem Flashen, nur die /etc/rc.local ist nicht vorhanden

      Wenn nicht vorhanden, einfach erstellen und mit Rechten 755 ausstatten:

      touch /etc/rc.local
      chmod 755 /etc/rc.local


      /etc/rc.local

      Shell-Script

      1. #!/bin/sh -e
      2. PATH=/usr/script:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
      3. /usr/script/xyz.sh &
      4. exit 0


      das & am Ende, damit es im Hintergrund in einem subprozesse ausgeführt wird, das verhindert etwaige Verzögerungen beim Enigma2 Start

      reboot
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

      ¯\_(ツ)_/¯

      Quellcode

      1. root@dm920:~$ mount | grep "/ "
      2. /dev/mmcblk1p1 on / type ext4 (rw,relatime,data=ordered)
      3. root@dm920:~$
    • Danke, großartig, funktioniert auf meiner Erstbox.
      Die zweite Box hat aber noch ein Problem. Diese Box hängt aber über zwei Fritzboxen, relativ langes Kabel und dann noch über Wlan am Netz. Ich habe deshalb schon immer ein leichtes Netzwerkproblem damit und vermute jetzt, dass bei Ausführung des Scriptes das Netzwerk noch nicht steht.
      Wie kann ich das Script zeitverzögert - z.B. 30 Sekunden - nach Reboot starten?
      Habe dies hier von dir in einem anderen Thread gefunden.
      1. #!/bin/bash -e
      2. function_myscript () {
      3. sleep 5
      4. /path/to/myscript.sh
      5. }
      6. function_myscript &
      7. exit 0


      Wäre das dann angepasst an meinen Fall so richtig?

      1. #!/bin/bash -e
      2. PATH=/usr/script:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
      3. function_myscript () {
      4. sleep 30
      5. /usr/script/xyz.sh &
      6. }
      7. function_myscript &
      8. exit 0


      Danke nochmals und einen schöne Sonntag
    • ja, aber 30 Sekunden sleep ist arg viel

      ich würde mit sleep 10 beginnenund dann immer um 5 Sekunden erhöhen, falls zu wenig
      je nachdem wie wichtig das Service ist, das du startest
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

      ¯\_(ツ)_/¯

      Quellcode

      1. root@dm920:~$ mount | grep "/ "
      2. /dev/mmcblk1p1 on / type ext4 (rw,relatime,data=ordered)
      3. root@dm920:~$