3 Möglichkeiten, eine Aufgabe/einen Job ohne Cron in Linux zu planen
Die Welt von Linux ist gefüllt mit so viel Spaß und interessanten Dingen, je mehr wir uns damit beschäftigen, desto mehr finden wir Arten.
In unseren Bemühungen, Ihnen diese kleinen Hacks und Tipps zu geben, die Sie von anderen unterscheiden, haben wir hier einige alternative Methoden entwickelt, um einen Job zu planen, ohne das Cron-Dienstprogramm in Linux zu verwenden.
Das Planen eines Auftrags/Befehls in Linux ist ein Akronym für cron. Wann immer wir einen Job planen müssen, rufen wir den Cron-Befehl auf, aber wussten Sie, dass wir einen Job zu einem späteren Zeitpunkt ohne Mais planen können? Sie können dies mit den folgenden gängigen Ansätzen tun.
1. Planen von Jobs unter Linux mit der Sleep-Schleife
Führen Sie alle 5 Sekunden einen Befehl (z. B. Datum) aus und schreiben Sie die Ausgabe in eine Datei (z. B. date.txt). Um dieses Szenario zu erreichen, müssen wir das folgende einzeilige Skript direkt an der Eingabeaufforderung ausführen.
$ while true; do date >> date.txt ; sleep 5 ; done &
Anatomie des obigen einzeiligen Skripts:
- while true – Fordert das Skript auf, ausgeführt zu werden, während die Bedingung wahr ist, es fungiert als Schleife, die den Befehl immer wieder ausführen lässt oder in einer Schleife sagen lässt.
- do – do führt aus, was folgt, d.h. Befehl ausführen oder Satz von Befehlen, der vor der do-Anweisung liegt.
- date >> date.txt – hier wird die Ausgabe des Datumsbefehls in eine Datei date.txt geschrieben. Beachten Sie auch, dass wir
>>und nicht>verwendet haben. >>stellt sicher, dass die Datei (date.txt) nicht bei jeder Ausführung des Skripts überschrieben wird. Es werden nur die Änderungen angehängt. Wohingegen>die Datei immer wieder überschreiben.- sleep 5 – Es fordert die Shell auf, einen Zeitunterschied von 5 Sekunden beizubehalten, bevor sie erneut ausgeführt wird. Beachten Sie, dass die Zeit hier immer in Sekunden gemessen wird. Angenommen, Sie möchten den Befehl alle 6 Minuten ausführen, sollten Sie (6*60) 360 in einer Folge des Energiesparmodus verwenden.
- done – markiert das Ende einer while-Schleife.
&– Stellen Sie den gesamten Prozess in einer Schleife in den Hintergrund.
In ähnlicher Weise können wir jedes Skript auf die gleiche Weise ausführen. Hier ist der Befehl, um ein Skript nach einem bestimmten Intervall (z. B. 100 Sekunden) aufzurufen, und der Name des Skripts lautet script_name.sh.
Erwähnenswert ist auch, dass das obige Skript in dem Verzeichnis ausgeführt werden sollte, in dem sich das aufzurufende Skript befindet, andernfalls müssen Sie einen vollständigen Pfad angeben (/home/$USER/.../script_name.sh).
Die Syntax für den Aufruf des Skripts in dem oben beschriebenen Intervall lautet:
$ while true; do /bin/sh script_name.sh ; sleep 100 ; done &
Hinweis: Der obige Einzeiler ist kein Ersatz für Cron, da das Cron-Dienstprogramm im Vergleich dazu eine ganze Reihe von Optionen unterstützt und sehr flexibel sowie anpassbar ist.
Wenn wir jedoch bestimmte Testfälle oder I/O-Benchmarks ausführen möchten, dann erfüllt der obige einzelne Befehl diesen Zweck.
2. Planen Sie Aufgaben mit Systemd-Timern
In den meisten modernen Linux-Distributionen ist Systemd das Standard-Init-System und verfügt über eine Timer-Funktion, mit der Sie Ihre Aufgaben planen können.
Erstellen Sie zunächst eine neue systemd-Timer-Unit-Datei mit der Erweiterung .timer, wie gezeigt.
$ sudo nano /etc/systemd/system/myjob.timer
Fügen Sie der Datei myjob.timer den folgenden Inhalt hinzu:
[Unit]
Description=My Job Timer
[Timer]
OnCalendar=*-*-* 00:00:00
Replace the OnCalendar value with the desired schedule
[Install]
WantedBy=timers.target
Mit dem Feld OnCalendar in einer Zeitgebereinheit systemd können Sie den Zeitplan für Ihren Job in einem bestimmten Format angeben.
- Jährlich: jährlich oder jährlich
- Monatlich: monatlich
- Wöchentlich: wöchentlich
- Täglich: täglich oder Mitternacht
- Stündlich: stündlich
- Minuten: Sie können eine bestimmte Minute im Format
*:MM(z. B.*:15alle 15 Minuten) oder einen bestimmten Bereich mit MM-MM (z. B. 10-30 für jede Minute von 10 bis 30) angeben.
Hier sind einige Beispiele, um das Format zu veranschaulichen:
## Run every day at 3:00 AM ##
OnCalendar=*-*-* 03:00:00
## Run every Monday and Friday at 10:00 AM ##
OnCalendar=Mon,Fri *-*-* 10:00:00
## Run every 30 minutes: ##
OnCalendar=*-*-* *:0/30:00
Erstellen Sie als Nächstes eine entsprechende Service Unit-Datei mit der Erweiterung .service im selben Verzeichnis:
$ sudo nano /etc/systemd/system/myjob.service
Fügen Sie der Datei myjob.service den folgenden Inhalt hinzu:
[Unit]
Description=My Job
[Service]
ExecStart=/path/to/your/job.sh
Replace "/path/to/your/job.sh" with the actual command or script to execute
[Install]
WantedBy=multi-user.target
Aktivieren und starten Sie den Timer:
$ sudo systemctl enable myjob.timer
sudo systemctl start myjob.timer
Dadurch wird die Ausführung des Auftrags gemäß dem angegebenen Timer geplant.
3. Planen von Aufgaben mit Anacron
Anacron ist ein zeitbasierter Job-Scheduler, mit dem Sie Jobs periodisch auf Systemen planen können, die nicht immer eingeschaltet sind. Es ist für Systeme konzipiert, die möglicherweise keinen regelmäßigen Zugriff auf cron haben. Wenn Anacron auf Ihrem System installiert ist, können Sie es verwenden, um Ihren Job zu planen.
Wenn es nicht installiert ist, können Sie es mit Ihrem Paketmanager installieren.
$ sudo apt install anacron [On Debian, Ubuntu and Mint]
sudo yum install anacron [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo emerge -a sys-apps/anacron [On Gentoo Linux]
sudo apk add anacron [On Alpine Linux]
sudo pacman -S anacron [On Arch Linux]
sudo zypper install anacron [On OpenSUSE]
Erstellen Sie eine neue Konfigurationsdatei (myjob.sh) für Ihren Job im Verzeichnis /etc/anacrontab.d/.
$ sudo nano /etc/anacrontab.d/myjob.sh
Geben Sie in der Konfigurationsdatei die Details Ihres Auftrags an.
Run myjob.sh every day with a delay of 5 minutes
1 5 myjob /path/to/myjob.shDie Felder in der Konfigurationsdatei haben folgende Bedeutung:
- Das erste Feld ist der Zeitraum, in dem der Auftrag @daily, @weekly, @monthly oder @yearly ausgeführt werden soll.
- Das zweite Feld ist die Zeit in Minuten, um die Jobausführung nach dem Systemstart zu verzögern.
- Das dritte Feld ist der Auftragsname, der zum Erstellen von Protokolldateien verwendet wird.
- Das vierte Feld ist der Befehl oder das Skript, das ausgeführt werden soll.
Jetzt führt Anacron Ihren Job automatisch nach dem angegebenen Zeitplan aus.
Das war's fürs Erste, wenn Sie solche Linux-Hacks oder Tricks kennen, können Sie sie über unseren Kommentarbereich mit uns teilen, und vergessen Sie nicht, diesen Artikel mit Ihren Freunden zu teilen.