Iteration eigener Skripte

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • 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 ::
    • 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)

      Source Code

      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:

      Source Code

      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:~#
      Display All
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

      The post was edited 1 time, last by Fred Bogus Trumper ().

    • m0rphU wrote:

      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:

      Source Code

      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 ::
    • du gibst folgenden command in der Konsole ein:

      Source Code

      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)


      Source Code

      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

      Source Code

      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:~#


      Source Code

      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

      The post was edited 3 times, last by Fred Bogus Trumper ().