staging.inyokaproject.org

crontab per Bash script ändern

Status: Ungelöst | Ubuntu-Version: Ubuntu 17.04 (Zesty Zapus)
Antworten |

Pythonator

Anmeldungsdatum:
9. September 2017

Beiträge: 8

Hallo, ich habe eine Bash Script geschrieben das mir eine CSV datei per curl herunterladet und diese mit einer vorhanden Datei vergleicht, wenn die heruntergeladen Datei aktueller ist, als die vorhanden, werden weiter Scripts für die Verarbeitung gestartet.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
PWD=`pwd`
# CSV Datei wird mit curl heruntergleanden
curl http://url.de/ > $PWD/data/NEW_datei.csv
echo "Die Neue CSV Datei wurder heruntergleande..."
# beide CSV Datein werden als Variablen abgespeichert
oldCSV="$PWD/data/datei.csv"
newCSV="$PWD/data/NEW_datei.csv"

# Vergleicher beider datein. 
if diff "$oldCSV" "$newCSV" &> /dev/null ; then
    echo "Die beiden Datein sind gleich"
else
    echo "Die heruntergeladene datei ist aktueller als die vorhande..."
    echo "Die alte datei wird überschrieben"
    cp $PWD/data/NEW_datei.csv $PWD/data/datei.csv
    echo "Der CSV Reader wird gestartet.."
    echo "Starte csv_reader_produkt.py"
fi

Das funktioniert auch sehr gut, allerdings würde ich das ganze jetzt vom Ergebnis, des ersten Bash Scripts automatisiert erneut starten wollen. Ich habe mir Cron angesehen aber wie kann ich es jetzt hinbekommen damit das Script abhängig vom Ergebnis gestartet wird?

Hatte gedacht ich lese die Uhrzeit aus addiere 1 oder 2 Stunden hinzu und das Script ändert dann den CronJob entsprechen aber leider geht das wohl nicht da man contab nur über crontab -e ändern kann, und wie sieht es aus wenn die if abfrage nun nicht zutrifft ?

Würde mich freuen wenn, jemand einen Rat weiß wie man das an besten umsetzen kann.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

@Pythonator: Ich würde einfach das Skript stündlich starten und vor dem herunterladen prüfen ob die Datei schon alt genug ist um erneut heruntergeladen zu werden.

Zeile 2 ist überflüssig.

Warum verwendest Du in Zeile 16 nicht $oldCSV und $newCSV? Und in doppelte Anführungszeichen würde ich es dort auch setzen. Hast Du doch sonst überall auch gemacht.

Pythonator

(Themenstarter)

Anmeldungsdatum:
9. September 2017

Beiträge: 8

Hallo Marc_BlackJack_Rintsch, danke für deine Antwort, Zeile 16 habe ich geändert, warum zweimal speichern lol. Allerdings kann ich es nicht nachvollziehen das Herunterladen am Datei alter festzulegen, hinzu kommt noch das ich die CSV Datensätze in einen weiteren Script in eine mysql Datenbank lade. Wenn ich es so machen würde wie du schreibt könnte es ja durchaus sein das mehrere Instanzen des Script laufen was meiner Meinung nach kontraproduktiv wäre.

Hat noch jemand einen anderen vorschlag ?

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

@Pythonator: Wieso geht das mit dem Alter der Datei nicht? Wie oft/wann führst Du das Skript denn jetzt über cron aus? Ich ging davon aus, das es beispielsweise einmal am Tag läuft.

Wenn es stündlich aufgerufen wird, dann müsste das Skript mindestens eine Stunde lang laufen damit es mehrfach laufen würde. Zudem könnte man das durch einen weiteren Test — nämlich ob das Skript bereits läuft — umgehen.

Kannst Du genauer beschreiben was da wann wie oft und warum ausgeführt werden soll? Ich habe das Gefühl mir ist nicht so ganz klar welches Problem hier eigentlich gelöst werden soll.

Pythonator

(Themenstarter)

Anmeldungsdatum:
9. September 2017

Beiträge: 8

Ok in verbindung mit dem Test ob das Script läuft würde es wohl funktionieren, hast du mal ein Code beispiel oder eine Link für mich wie du das Lösen würdes ?

Antworten |