Wie kann ich ein Programm nur einmal pro Tag ausführen und dabei variable Betriebszeiten und mögliche Programmfehler berücksichtigen?

Wie kann ich ein Programm nur einmal pro Tag ausführen und dabei variable Betriebszeiten und mögliche Programmfehler berücksichtigen?

Ich muss einen Befehl einmal, aber nur einmal pro Tag ausführen, bis er erfolgreich ist.

Eine kontinuierliche Verfügbarkeit kann nicht erwartet werden und der Programmerfolg kann nicht garantiert werden.

Dieses Programm erfordert Netzwerkzugriff, aber nicht jedes Mal, wenn ich meinen Computer mit Netzwerkzugriff starte.

Mein Programm wird z. B. mit -1 beendet, sofern es nicht erfolgreich ist (was 0 zurückgibt).

Antwort1

Verwenden Sie hierfür eine Shell. Erstellen Sie beispielsweise ein Skript mit etwa folgendem Inhalt:

#!/bin/sh
# Check to see if this is already running from some other day
mkdir /tmp/lock || exit 1
while ! command-to-execute-until-succeed; do
    # Wait 30 seconds between successive runs of the command
    sleep 30
done
rmdir /tmp/lock

Richten Sie cron anschließend auf das Skript.

Antwort2

Der einfachste Weg hierfür besteht meiner Meinung nach darin, dass Ihr Programm vor dem Versuch die Existenz einer Datei überprüft und diese Datei nach der erfolgreichen Ausführung erstellt.

Wenn Sie das Programm nicht entsprechend ändern können, verwenden Sie den Cronjob selbst. Etwas in der Art:

test -e /path/to/tempfile || ( /path/to/program && touch -a /path/to/tempfile )

Aufgrund der Art und Weise, wie Unix Bedingungsprüfungen auswertet, ist der gesamte Ausdruck wahr, sobald die linke Seite der ||Bedingung ausgewertet wird , und die rechte Seite wird nie ausgewertet – d. h. das Programm wird nicht aufgerufen.true

Innerhalb der Klammern erfordert && dann, dass beide Seiten als „true“ ausgewertet werden. Wenn also /path/to/programmit einem Rückgabecode ungleich Null beendet wird, hat es keinen Sinn, die Anweisung auf der rechten Seite auszuwerten – der Ausdruck wird bereits als „false“ ausgewertet – und /path/to/tempfilewird nie erstellt.

verwandte Informationen