Crontab - Scripte

  • Hallo Leute,

    Ich möchte gern ein Script alle 30 Minuten ausführen:
    */30 * * * * /Script1

    Nun sollen die von diesem Script geladenen Daten im Anschluss von einem weiteren Script verwendet werden:
    */30 * * * * /Script2

    Das Problem ist nun, dass die Daten des ersten Scripts bei Aufruf des zweiten Scripts noch gar nicht aktualisiert sind. Kann ich jetzt irgendwie einen Zeitversatz im Cronjob einbauen?

    Also nicht nur zur vollen und halben Stunde, sondern immer um 05 und 35?

    */35 * * * * /Script2 bedeutet ja einen Aufruf alle 35 Minuten, wodurch der Zeitversatz immer größer würde.

    Grüße

  • Mach doch einfach
    0 * * * * /Script1
    30 * * * * /Script1
    5 * * * * /Script2
    35 * * * * /Script2

    @all kann man das zusammenfassen? in dieser Art:
    0+30 * * * * /Script1
    Habs spontan nicht gefunden.

  • Forumsuche nach: crontab


    Ruf einfach am Ende des 1.Scripts das 2.Script auf - damit stellst du sicher dass das 2.Script erst dann ausgeführt wird wenn eben das erste fertig ist

  • Hallo,

    ich hatte auch alles mögliche gegoogelt, mir Beispiele angeschaut. Aber auf die einfachste Lösung mit 0,30 und 5,35 bin ich nicht gekommen. Ich hatte mich so auf den Aufruf alle x Minuten konzentriert, dass ich keine andere Möglichkeit mehr gesehen habe. Dank an euch!

    Grundsätzlich möchte ich die Scripte nicht ineinander bauen. Script 1 schreibt diverse Daten in ein File und Script 2 erzeugt einen UDP Befehl mit einem ausgewählten Wert aus der Textdatei. Das Script 2 wird mittels Parametern aufgerufen: IP des Empfängers, Wert der gesendet werden soll. Für jeden Wert muss ein einzelner UDP Befehl erzeugt werden. Ich finde es so deutlich übersichtlicher, als wenn ich alles ineinanderpacke.

    Aber wie gesagt, es läuft ja jetzt und sollte mal ein Wert zeitversetzt gesendet werden, ist es nicht tragisch.

    Grüße

    Einmal editiert, zuletzt von Scrati (17. Juli 2014 um 07:17)

  • Naja um sicher zu stellen dass das 2.Script erst dann ausgeführt wird wenn das 1.Script fertig ist, könntest du auch mit temporären Dateien arbeiten:
    Das 1.Script erzeugt beim starten eine Lockdatei die wieder gelöscht wird sobald es seine Arbeit erledigt hat.
    Das 2.Script wird ausgeführt, prüft auf existens der Lockdatei und dreht sich in einer while Schleife so lange im Kreis bis die Lockdatei weg ist, erst dann fährt es fort und macht das was es tun soll (einfaches beenden der while Schleife und der eigentliche Code steht dann drunter)

    Spoiler anzeigen


    1.Script:

    Bash
    #!/bin/bash
    touch /tmp/lockfile
    
    
    #daten erfassen
    
    
    rm -f /tmp/lockfile

    2.Script:

    Bash
    #!/bin/bash
    while true; do
      [ ! -f /tmp/lockfile ] && break
      sleep 5
    done
    
    
    #code zum abschicken der daten vom 1.script

    Allerdings versteh ich nicht wieso du das in meherere Scripts aufteilst - offensichtlich könnte das auch alles in nur ein Script eingefügt werden da dass ja zusammengehört ;)
    bash Scripts werden immer von oben nach unten abgearbeitet

  • Das aufzuteilen hört sich nach seiner Erklärung durchaus sinnvoll an.
    Was man allerdings tun könnte ist, ein script machen, was erst das eine, und dann das andere ausführt. Und dieses Script dann per crontab zu starten.
    Damit bleibt die Modularität bestehen und wir haben timing-sicheres Verhalten und kein Chaos in der Crontab

  • Das hatte ich ja bereits in Beitrag#6 vorgeschlagen aber das will er anscheint nicht machen :-/

    Grundsätzlich möchte ich die Scripte nicht ineinander bauen.

    Noch ein 3.Script was erst das 1. und dann das 2. ausführt erhöht doch nur noch mehr das Chaos - imho :)

  • nope. Wenn man zwei eigenständige Scripte hat die auch unabhängig voneinander arbeiten konnen und sollen, dann ist das in einem dritten Script doch genau wie das Laden von zwei Bibliotheken in einem Programm.

    Ob die zwei Scripte diese Modularität haben ab der das sinnvoll ist, ist nicht unsere Entscheidung. Scrati ist der Ansicht, und damit nehme ich das als gegeben an.
    Und da wir die Scripte nicht kennen, können wir dazu auch garnichts sagen.

  • Aber die Scripte scheinen voneinander abhängig zu sein. Das 1.Script erfasst Daten die das 2.Script verschicken soll. Wenn das 1.Script aber noch nicht fertig ist oder dabei ein Fehler auftrat kann das 2.Script auch nicht so funktionieren wie es sollte bzw verschickt es dann halt alte Daten... Die Scripte sind also nicht eigenständig sondern wie gesagt voneinander abhängig, nur getrennt aber abhängig :D

  • ... TE ist er Ansicht sie gehören nicht zusammen. Das hat er deutlich gemacht. Das sie auf einander aufbauen ist noch kein Widerspruch! Vielleicht können sie ja auch mit anderen Daten jeweils arbeiten.

    Zitat


    Script 1 schreibt diverse Daten in ein File


    Kann auch für eine Anzeige verwendet werden, script 2 zwangsmäßig darin auszurufen ist daher FALSCH

    Zitat


    Script 2 erzeugt einen UDP Befehl mit einem ausgewählten Wert aus der Textdatei.


    Das kann doch durchaus auf für andere Zwecke verwendet werden, Bibliotheksmäßig.

    Warum versuchst du den TE krampfhaft zu widerlegen, und das auch noch ohne die notwendigen Infos?

    Und auch wenn du Recht hast, dann ist der TE anderer Meinung und ist das schlimm?

  • Hallo, ihr seid ja gut drauf. :bravo2:

    Folgender Hintergrund: Das ganze sind Scripte, die ein netter Hausautomationsnutzer in einem anderen Forum zur Verfügung gestellt hat. :daumendreh2:

    Prinzipiell traue ich mir zwar zu, die Scripte zusammenzuführen, aber ich hätte dann immer das Problem, wenn der o.g. Nutzer ein Update zur Verfügung stellt.

    Ich stimme ja zu, dass insbesondere das Datensammelscript, nach dem speichern auf jeden Fall auch den Aufruf des Datenversendescripts vornehmen könnte. Es würde dann nur eines Crontab-Eintrags bedürfen und die Datenintegrität wäre gewart.

    Praktischer wäre es alles im Sammelscript zu vereinen, oder zumindest den Aufruf (teils ja auch mehrfach) nicht über crontab sondern über das Sammelscript selbst vorzunehmen. Eingetragen werden muss es irgendwo und ob ich das nun da oder dort mache ist prinzipiell egal.

    Da es jetzt funktioniert, ist meine Bereitschaft aber erheblich gesunken, da noch was dran zu ändern. Es gibt da noch einige andere Baustellen, an denen ich Arbeiten muss. :s

    Vielleicht schau ich es mir nächste Woche nochmal an! :danke_ATDE:

    Grüße


  • Prinzipiell traue ich mir zwar zu, die Scripte zusammenzuführen, aber ich hätte dann immer das Problem, wenn der o.g. Nutzer ein Update zur Verfügung stellt.


    Wenn es dir nur um den Punkt der Updates geht wäre der Vorschlag von Horroreyes am besten. Ein Script in dem beide eingetragen sind und nacheinander ausgeführt werde:

    script0.sh

    Bash
    #!/bin/bash
    
    
    /path/to/script1.sh
    
    
    /path/to/script2.sh

    Dieses eine Script script0.sh trägst du dann in die crontab ein :)

    Wenn sich dann an den script1.sh oder script2.sh etwas ändert kannst du das problemlos austauschen

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!