Problem: Einen Cron-Job einmalig zu einem bestimmten Zeitpunkt ausführen
Cron-Jobs werden normalerweise so eingerichtet, dass sie wiederholt zu geplanten Zeiten ausgeführt werden. Manchmal muss jedoch eine Aufgabe nur einmal zu einem bestimmten Zeitpunkt ausgeführt werden. Dies kann knifflig sein, wenn man Cron so einrichtet, dass es eine einzelne, zeitspezifische Aufgabe ohne Wiederholung ausführt.
Lösungen für die einmalige Ausführung von Cron-Jobs zu einem bestimmten Zeitpunkt
Verwendung des 'at'-Befehls für einmalige Terminplanung
Der 'at'-Befehl plant einmalige Aufgaben. Sie können einen zukünftigen Zeitpunkt für die Ausführung eines Befehls festlegen. Die Syntax lautet:
echo "/pfad/zum/befehl optionen" | at [zeit]
Um einen Befehl morgen auszuführen:
echo "/usr/bin/mein_befehl" | at now + 1 day
Tipp: Geplante Aufgaben überprüfen
Verwenden Sie den 'atq'-Befehl, um alle geplanten Aufgaben aufzulisten. Dies hilft Ihnen zu bestätigen, dass Ihre Aufgabe erfolgreich geplant wurde, und zeigt ihre Warteschlangennummer für mögliche Änderungen oder Löschungen an.
Cron-Job mit selbstdeaktivierendem Skript
Wenn 'at' nicht verfügbar ist, erstellen Sie ein selbstdeaktivierendes Skript:
-
Richten Sie einen Cron-Job mit einer bestimmten Zeit ein:
0 0 2 12 * /pfad/zu/ihrem_skript.sh
-
Erstellen Sie ein Skript, das nur einmal ausgeführt wird:
#!/bin/bash SKRIPT="/pfad/zu/ihrem_skript.sh" MARKER="${SKRIPT}.erledigt" if [ -f "$MARKER" ]; then exit 0 fi # Ihre einmalige Aufgabe hier echo "Aufgabe ausgeführt" | mail -s "Einmalige Aufgabe abgeschlossen" benutzer@beispiel.de touch "$MARKER"
Dieses Skript prüft auf eine Markierungsdatei und beendet sich, wenn diese existiert, um mehrfache Ausführungen zu verhindern.
Verwendung von Cron mit Datumsprüfung
Eine weitere Methode verwendet die Datumsprüfung:
#!/bin/bash
AUSFÜHRUNGSDATUM="2023-12-25"
AKTUELLES_DATUM=$(date +%Y-%m-%d)
if [ "$AKTUELLES_DATUM" != "$AUSFÜHRUNGSDATUM" ]; then
exit 0
fi
# Ihre einmalige Aufgabe hier
echo "Feiertagsaufgabe ausgeführt" | mail -s "Feiertagsaufgabe abgeschlossen" benutzer@beispiel.de
Dieses Skript führt die Aufgabe nur am festgelegten Datum aus und beendet sich, wenn das aktuelle Datum nicht übereinstimmt.
Beispiel: Protokollierung zu datumsbasierten Cron-Jobs hinzufügen
#!/bin/bash
AUSFÜHRUNGSDATUM="2023-12-25"
AKTUELLES_DATUM=$(date +%Y-%m-%d)
PROTOKOLLDATEI="/var/log/einmaliger_cron.log"
if [ "$AKTUELLES_DATUM" != "$AUSFÜHRUNGSDATUM" ]; then
echo "$(date): Skript geprüft, aber nicht ausgeführt (falsches Datum)" >> "$PROTOKOLLDATEI"
exit 0
fi
# Ihre einmalige Aufgabe hier
echo "Feiertagsaufgabe ausgeführt" | mail -s "Feiertagsaufgabe abgeschlossen" benutzer@beispiel.de
echo "$(date): Aufgabe erfolgreich ausgeführt" >> "$PROTOKOLLDATEI"
Dieses Beispiel fügt eine Protokollierung hinzu, um Ausführungsversuche und Erfolge des Skripts zu verfolgen, was nützlich für die Überwachung und Fehlerbehebung von einmaligen Cron-Jobs ist.