Wie führt man einen Cron Job alle 30 Sekunden aus?

Veröffentlicht 27. August 2024

Problem: Cron Jobs häufiger ausführen

Cron Jobs laufen normalerweise in Intervallen von einer Minute oder länger. Manche Aufgaben müssen jedoch häufiger ausgeführt werden, zum Beispiel alle 30 Sekunden. Dies stellt ein Problem für Benutzer dar, die Aufgaben häufiger planen möchten, als es das Standard-Cron-System erlaubt.

Lösung #1: Verwendung der Cron- und Sleep-Methode

Erstellung eines Shell-Skripts für 30-Sekunden-Intervalle

Um eine Aufgabe alle 30 Sekunden mit Cron und Sleep auszuführen, erstellen Sie ein Shell-Skript. Dieses Skript enthält Ihre Aufgabe und einen Sleep-Befehl, um das 30-Sekunden-Intervall zu erzeugen. Hier ein Beispiel:

#!/bin/bash

# Ihre Aufgabe kommt hier hin
echo "Aufgabe ausgeführt um $(date)" >> /pfad/zur/logdatei.log

# 30 Sekunden warten
sleep 30

# Aufgabe erneut ausführen
echo "Aufgabe ausgeführt um $(date)" >> /pfad/zur/logdatei.log

Speichern Sie dieses Skript als "aufgabe_alle_30s.sh". Setzen Sie die Ausführungsrechte für das Skript:

chmod +x /pfad/zur/aufgabe_alle_30s.sh

Dieses Skript führt Ihre Aufgabe aus, protokolliert die Ausführungszeit, wartet 30 Sekunden und führt die Aufgabe erneut aus. Indem Sie dieses Skript mit Cron jede Minute planen, erreichen Sie ein 30-Sekunden-Intervall zwischen den Aufgabenausführungen.

Planung des Skripts mit Crontab

So planen Sie das Skript mit Crontab:

  1. Öffnen Sie die Crontab-Datei zum Bearbeiten:

    crontab -e
  2. Fügen Sie diese Zeile hinzu, um das Skript jede Minute auszuführen:

    * * * * * /pfad/zur/aufgabe_alle_30s.sh
  3. Speichern Sie und verlassen Sie den Crontab-Editor.

Um zu überprüfen, ob der Cron Job eingerichtet ist, zeigen Sie die aktuellen Crontab-Einträge an:

crontab -l

Dies sollte die Zeile anzeigen, die Sie zur Crontab-Datei hinzugefügt haben.

Um zu überprüfen, ob Ihr Skript läuft, prüfen Sie die Logdatei, die Sie im Skript angegeben haben:

tail -f /pfad/zur/logdatei.log

Diese Methode bietet eine einfache Möglichkeit, Aufgaben alle 30 Sekunden mit Cron und einem Shell-Skript mit einem Sleep-Befehl auszuführen.

Lösung #2: Planung von 2 Cron Jobs mit 30 Sekunden Sleep

Diese Methode verwendet zwei Cron Jobs, die in alternierenden Minuten mit einem Sleep-Befehl laufen, um ein 30-Sekunden-Intervall zu erreichen. So richten Sie es ein:

  1. Erstellen Sie zwei Shell-Skripte:

Skript 1 (aufgabe_ausführen_1.sh):

#!/bin/bash
sleep 0
/pfad/zu/ihrer/aufgabe

Skript 2 (aufgabe_ausführen_2.sh):

#!/bin/bash
sleep 30
/pfad/zu/ihrer/aufgabe
  1. Machen Sie die Skripte ausführbar:

    chmod +x aufgabe_ausführen_1.sh aufgabe_ausführen_2.sh
  2. Bearbeiten Sie die Crontab-Datei:

    crontab -e
  3. Fügen Sie diese Zeilen zur Crontab hinzu:

    * * * * * /pfad/zu/aufgabe_ausführen_1.sh
    * * * * * /pfad/zu/aufgabe_ausführen_2.sh

Diese Einrichtung führt das erste Skript zu Beginn jeder Minute aus und das zweite Skript 30 Sekunden später. Das Ergebnis ist eine Aufgabenausführung alle 30 Sekunden.

Vorteile:

  • Einfach einzurichten
  • Verwendet das Standard-Cron-System
  • Verbraucht wenig Ressourcen

Nachteile:

  • Das Timing kann mit der Zeit abweichen
  • Schwierig, das Intervall zu ändern

Diese Lösung funktioniert für die meisten Aufgaben, die alle 30 Sekunden ausgeführt werden müssen, ohne exaktes Timing zu benötigen.

Alternative Ansätze für Sub-Minuten-Aufgabenausführung

Verwendung von schleifenbasierten Skripten

Sie können ein Skript erstellen, das kontinuierlich läuft, um Aufgaben alle 30 Sekunden auszuführen. Diese Methode beinhaltet das Schreiben eines Skripts, das in einer Schleife läuft, die Aufgabe ausführt und dann 30 Sekunden pausiert, bevor die nächste Ausführung erfolgt.

Hier ein einfaches Beispiel für ein schleifenbasiertes Skript:

#!/bin/bash

while true; do
    # Ihre Aufgabe kommt hier hin
    echo "Aufgabe ausgeführt um $(date)"

    # 30 Sekunden warten
    sleep 30
done

Vorteile dieser Methode:

  • Einfach zu implementieren
  • Präzise Zeitsteuerung
  • Kein Bedarf für Cron oder Systemd

Nachteile dieser Methode:

  • Das Skript muss kontinuierlich laufen
  • Es verbraucht ständig Systemressourcen
  • Wenn das Skript stoppt, hört die Aufgabe auf zu laufen

Verwendung von Cloud-Diensten für präzise Planung

Cloud-Dienste wie AWS Lambda mit CloudWatch Events bieten eine genaue Zeitsteuerung für die Aufgabenausführung. Dieser Ansatz verlagert die Planung und Ausführung in die Cloud, was für einige Aufgaben nützlich sein kann.

So verwenden Sie AWS Lambda und CloudWatch Events:

  1. Erstellen Sie eine Lambda-Funktion, die Ihre Aufgabe ausführt.
  2. Richten Sie eine CloudWatch Event-Regel ein, um die Lambda-Funktion alle 30 Sekunden auszulösen.

Zu beachtende Punkte bei der Verwendung von Cloud-basierten Lösungen:

  • Kosten: Cloud-Dienste berechnen basierend auf der Nutzung, was sich bei häufigen Aufgaben summieren kann.
  • Netzwerkabhängigkeit: Die Ausführung Ihrer Aufgabe hängt von der Internetverbindung ab.
  • Einrichtung: Es erfordert Kenntnisse von Cloud-Diensten und kann schwieriger einzurichten sein als lokale Lösungen.
  • Skalierbarkeit: Cloud-Dienste können mit erhöhter Last besser umgehen als lokale Systeme.
  • Überwachung: Cloud-Plattformen bieten oft integrierte Überwachungs- und Protokollierungswerkzeuge.

Wählen Sie die Methode, die zu Ihren Bedürfnissen passt, unter Berücksichtigung von Faktoren wie Aufgabenkomplexität, Ressourcenverbrauch und Infrastrukturanforderungen.