GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Der beste Weg, um sicherzustellen, dass ein Skript einmal pro Periode ausgeführt wird?

Ich brauche ein bestimmtes Skript, das einmal im Monat ausgeführt wird (andere, die diese Frage sehen, müssen es möglicherweise einmal am Tag/Woche/Jahr/5 Tage usw. ausführen).

Ich weiß, dass ich cron dazu verwenden kann mit:

0 0 1 * * ./script.sh

Was aber, wenn das Gerät während dieses Zeitraums offline ist (z. B. Stromausfall am 1. eines bestimmten Monats).

Gibt es eine elegante Lösung dazu? Oder müsste ich eine Unterroutine in dieses Skript einfügen, um einen I've-run-this-month-already zu setzen Wert, und dann wird jeden Tag des Monats (oder beim Booten) ein anderes Skript ausgeführt, um diesen Wert zu überprüfen?

Aktualisierung:

Ich muss mein Skript einmal im Monat ganz am Anfang des Monats ausführen. Beim Schreiben eines Skripts, um eine Reihe von Dingen zu erreichen, habe ich den folgenden Code erstellt. Ich stelle es hier nur für den Fall, dass jemand es nützlich findet, nachdem er diese Frage gefunden hat.

# CHECK FOR THE OLD_MONTH FILE
if [ ! -e /usr/local/bin/system/old_month ]; then
        # CREATE IT IF IT DOESN'T EXIST WITH THIS MONTHS DATE
        echo `date` | awk '{print $2,$6}' > /usr/local/bin/system/old_month
fi

# CREATE A NEW FILE EVERY TIME THIS SCRIPT IS RUN WITH THIS MONTHS DATE
echo `date` | awk '{print $2,$6}' > /usr/local/bin/system/this_month

# CHECK IF OLD_MONTH AND THIS_MONTH ARE NOT THE SAME
if ! cmp /usr/local/bin/system/this_month /usr/local/bin/system/old_month > /dev/null 2>&1 ;
then
        # RUN YOUR RELEVANT CODE HERE #
        echo `date` | awk '{print $2,$6}' > /usr/local/bin/system/old_month     # UPDATE THE VALUE IN OLD_MONTH SO THAT THEY WILL MATCH NEXT TIME
fi

Akzeptierte Antwort:

Sie können dafür Anacron verwenden, es wurde entwickelt, um Jobs in bestimmten Intervallen auszuführen, ohne davon auszugehen, dass das System ständig eingeschaltet ist. Wenn ein Job jeden Monat ausgeführt werden soll, prüft Anacron, ob er im vorherigen Monat ausgeführt wurde, und führt ihn aus, wenn dies nicht der Fall ist (und denken Sie daran, dass er ihn nicht für einen weiteren Monat erneut ausführen muss).

In Debian-Derivaten arbeitet Anacron gut mit Cron zusammen, um sich um /etc/cron.{daily,weekly,monthly} zu kümmern entsprechend (also definieren Sie Ihre monatliche Aufgabe einfach als monatlichen Job in /etc/cron.monthly , und es wird entsprechend ausgeführt).

Auf anderen Systemen würden Sie Ihre monatliche Aufgabe in /etc/anacrontab definieren .


Linux
  1. Einen Befehl ausführen, der von einem Alias ​​verdeckt wird?

  2. Wo wird ein Shell-Skript ausgeführt?

  3. Wie man ein Skript ausführt??

  4. Kompilieren Sie ein PHP-Skript unter Linux

  5. Was ist der beste Weg, um sicherzustellen, dass nur eine Instanz eines Bash-Skripts ausgeführt wird?

So führen Sie ein Python-Skript in PHP aus

So führen Sie ein Bash-Skript aus

Skript mit Argumenten als Benutzer ausführen?

Skript beim Start?

Was ist der schnellste Weg, um ein Skript auszuführen?

Führen Sie ein Shell-Skript als ein anderer Benutzer aus