So führen Sie Jobs mit einem Intervall von weniger als 1 Minute mit dem zeitbasierten Cron-Scheduler aus
Wenn Sie mit dem zeitbasierten Cron-Scheduler unter Linux arbeiten, müssen Sie möglicherweise Aufgaben in Intervallen von weniger als einer Minute ausführen. Die nativen Funktionen von Cron erlauben jedoch keine solche granulare Planung. Standardmäßig beträgt das kleinste Intervall von Cron eine Minute. Dies kann für bestimmte Anwendungen, bei denen Aufgaben alle paar Sekunden oder in einem genaueren Zeitintervall ausgeführt werden müssen, einschränkend sein. In diesem Artikel werden wir mehrere Methoden untersuchen, um diese Einschränkung zu überwinden und Aufgaben in Intervallen von weniger als einer Minute erfolgreich zu planen.
In diesem Tutorial lernen Sie:
- Wie man Aufgaben in Intervallen von weniger als einer Minute mit verschiedenen Methoden ausführt
- Schritt-für-Schritt-Anleitung für jede Methode mit Beispielcode
Methoden zum Ausführen von Aufträgen mit einem Intervall von weniger als 1 Minute
Es gibt mehrere Methoden, um die Auftragsausführung in Intervallen von weniger als einer Minute zu erreichen. Jede Methode hat ihre eigenen Vorteile und eignet sich für unterschiedliche Anwendungsfälle. Im Folgenden finden Sie drei Methoden, die Sie verwenden können.
Verwenden einer while-Schleife in einem Bash-Skript: Eine der einfachsten Möglichkeiten, eine Aufgabe in Intervallen von weniger als einer Minute auszuführen, ist die Verwendung einer while-Schleife in einem Bash-Skript. Diese Methode umfasst das Schreiben eines Skripts, das kontinuierlich ausgeführt wird, einen Befehl ausführt und dann für eine bestimmte Anzahl von Sekunden in den Ruhezustand versetzt wird.
#!/bin/bash while true; do # Your command here sleep 10 doneVerwenden von systemd-Timern:
SYSTEMD-TIMER-PRÄZISION
Systemd-Timer eignen sich zum Planen von Aufgaben in Intervallen von weniger als einer Minute, bieten jedoch möglicherweise kein präzises Timing. Faktoren wie Systemauslastung, Ausführungszeit und Timergranularität können zu leichten Verzögerungen führen, sodass das Intervall etwas länger als angegeben ist. Bei kritischen Aufgaben, die ein exaktes Timing erfordern, sollten Sie alternative Lösungen in Betracht ziehen oder das Intervall entsprechend anpassen.[Unit] Description=Run My Task [Service] ExecStart=/path/to/your/script.sh2. Erstellen Sie die Timer-Datei:
– Erstellen Sie als Nächstes eine entsprechende Timer-Datei unter/etc/systemd/system/mytask.timer. Diese Timer-Datei steuert, wie oft die Aufgabe ausgeführt wird.
– Die DirektiveOnBootSec=10stellt sicher, dass der Timer 10 Sekunden nach dem Hochfahren des Systems gestartet wird.
– Die DirektiveOnUnitActiveSec=10plant die Ausführung der Aufgabe alle 10 Sekunden nach der letzten Ausführung des Dienstes. Passen Sie diesen Wert an, um das gewünschte Intervall einzustellen.
– Das FeldWantedBy=timers.targetstellt sicher, dass der Timer automatisch gestartet wird, wenn das System hochfährt.[Unit] Description=Run My Task Every 10 Seconds [Timer] OnBootSec=10 OnUnitActiveSec=10 [Install] WantedBy=timers.target3. Laden Sie systemd neu und aktivieren Sie den Timer:
– Sobald beide Dateien erstellt sind, laden Sie die systemd-Manager-Konfiguration neu, um den neuen Dienst und den Timer zu erkennen, indem Sie Folgendes ausführen:systemctl daemon-reload– Aktivieren Sie dann den Timer, um ihn beim Booten automatisch zu starten:
systemctl enable mytask.timer– Starten Sie abschließend den Timer zum ersten Mal manuell (optional):
systemctl start mytask.timer4. Überprüfen Sie den Timer-Status:
– Um zu überprüfen, ob Ihr Timer korrekt läuft, können Sie seinen Status überprüfen mit:systemctl status mytask.timer– Dieser Befehl zeigt Ihnen an, ob der Timer aktiv ist und wann er als nächstes ausgeführt werden soll.
5. Überprüfen Sie die Timer-Protokolle:
– Sie können die Protokolle sowohl für den Dienst als auch für den Timer auch mit dem Befehl journalctl überprüfen:journalctl -u mytask.service– Hier finden Sie Details zur Ausführung der Aufgabe und zu möglichen Problemen.
In diesem Setup definiert die Service-Unit die auszuführende Aufgabe, während die Timer-Unit die Häufigkeit der Ausführung steuert. Die Direktive
OnUnitActiveSec=10in der Timer-Unit stellt sicher, dass die Aufgabe alle 10 Sekunden ausgeführt wird. Diese Methode ist ressourcenschonender als die Verwendung einer while-Schleife, da sie die integrierten Funktionen von systemd für eine präzise Planung nutzt.Verwendung eines Crontab-Hacks mit Schlaf: Eine andere Methode, um Aufgaben in Intervallen von weniger als einer Minute auszuführen, besteht darin, einen Crontab-Eintrag in Kombination mit dem Schlafbefehl zu verwenden. Mit dieser Methode können Sie die Ausführung der Aufgabe innerhalb derselben Minute staffeln.
* * * * * /bin/bash -c 'command1; sleep 15; command2; sleep 15; command3'
Bei dieser Methode stellt die while-true-Schleife sicher, dass das Skript unbegrenzt ausgeführt wird. Der Befehl sleep 10 hält das Skript zwischen den einzelnen Iterationen für 10 Sekunden an, sodass die Aufgabe alle 10 Sekunden ausgeführt werden kann. Diese Methode ist einfach, verbraucht aber mehr CPU-Ressourcen, da sie kontinuierlich ausgeführt wird.
Systemd-Timer bieten eine effizientere und flexiblere Alternative zu Cron, um Aufgaben in Intervallen von weniger als einer Minute zu planen. Systemd-Timer eignen sich besonders gut für Aufgaben, die ein präzises Timing und einen geringeren Ressourcenverbrauch erfordern. Im Folgenden finden Sie die detaillierten Schritte zum Erstellen eines systemd-Dienstes und eines entsprechenden Timers, um Ihre Aufgabe in einem genauen Intervall auszuführen.1. Erstellen Sie die Dienstdatei:
In diesem Beispiel wird der Cron-Job jede Minute ausgeführt, aber die Sleep-Befehle werden verwendet, um die Ausführung nachfolgender Befehle zu verzögern. Dadurch wird die Aufgabe effektiv in kleinere Intervalle innerhalb derselben Minute aufgeteilt. Obwohl diese Methode keine echte Planung innerhalb einer Minute bietet, kann sie für bestimmte Szenarien nützlich sein, in denen das genaue Timing nicht entscheidend ist.
Schlussfolgerung
Während die Standardfunktionen von Cron die Aufgabenplanung auf Intervalle von einer Minute beschränken, gibt es mehrere Methoden, um eine häufigere Ausführung zu erreichen. Unabhängig davon, ob Sie sich für eine while-Schleife, systemd-Timer oder eine clevere Kombination aus Cron und Schlaf entscheiden, bietet jeder Ansatz eine Möglichkeit, diese Einschränkung zu überwinden. Abhängig von Ihren spezifischen Anforderungen können Sie die Methode auswählen, die am besten zu Ihren Anforderungen und Systemressourcen passt.

