Heim >Betrieb und Instandhaltung >Betrieb und Wartung von Linux >So veranlassen Sie Crontab, jede Sekunde eine Aufgabe auszuführen
Crontab ist eine geplante Planungskonfigurationsdatei unter Linux. Dadurch können wir Systemprogramme, Skripte, Befehle und Aufgaben zu festgelegten Zeiten ausführen , Intervall- und Taktbetrieb. Die kleinste Zeitgranularität in Crontab beträgt Minuten. Mit anderen Worten: Durch die Crontab-Konfiguration können wir die Zielaufgabe höchstens einmal pro Minute ausführen. Eine häufigere Ausführung ist nicht möglich und wir können nur andere Methoden verwenden.
Verwandte Lernempfehlungen: Linux-Video-Tutorial
Was sollten Sie beispielsweise tun, wenn ein Programm alle 30 Sekunden ausgeführt werden soll?
Es gibt immer noch Problemumgehungen. Eine Idee besteht darin, in Crontab zwei Konfigurationen hinzuzufügen, eine dient der normalen Planung und wird einmal pro Minute ausgeführt, die andere besteht darin, vor der Ausführung 30 Sekunden zu warten.
# Need these to run on 30-sec boundaries, keep commands in sync. * * * * * /path/to/executable param1 param2 * * * * * ( sleep 30 ; /path/to/executable param1 param2 )
Diese Methode fühlt sich etwas steif und seltsam an, aber sie funktioniert. Diese Methode kann tatsächlich in einer Zeile abgekürzt werden:
* * * * * /bin/bash -l -c "/path/to/executable; sleep 30 ; /path/to/executable"
Eine andere Methode ist die Verwendung des Befehls watch:
$ watch --interval .30 script_to_run_every_30_sec.sh
Watch ist jedoch ein Befehlszeilentool, das wir verwenden können nohup lässt es im Hintergrund laufen.
SystemD-TimerWenn das von uns verwendete Linux-System über SystemD verfügt, können wir den SystemD-Timer verwenden, um Programme jederzeit in einer Granularität zu planen, die theoretisch natürlich bis in die Nanosekundenebene reichen kann , Es ist irgendwie verrückt, das zu tun. Kurz gesagt, die Flexibilität bei der Aufgabenplanung ist viel höher als bei Cron – es besteht keine Notwendigkeit, lahme Lösungen wiesleep zu verwenden.
Verglichen mit crontab, das die Konfiguration in einer Zeile abschließt, ist das Einrichten eines SystemD-Timers etwas komplizierter, aber um Planungsaufgaben mit einer Granularität kleiner als „pro Minute“ besser implementieren zu können, ist diese Methode einen Versuch wert. Das Implementierungsprinzip des SystemD-Timers besteht einfach aus zwei Teilen: einem Systemdienst und einem SystemD-Timer. Der SystemD-Timer führt die Planung durch und Aufgaben werden in den Dienst geschrieben. Hier ist ein einfaches Beispiel. Das Ziel besteht darin, dass der Systemlogger alle zehn Sekunden „Hello World“ ausgibt;/etc/systemd/system/helloworld.service
[Unit] Description=Say Hello [Service] ExecStart=/usr/bin/logger -i Hello World
/etc/systemd/system/helloworld.timer
[Unit] Description=Say Hello every 10 seconds [Timer] OnBootSec=10 OnUnitActiveSec=10 AccuracySec=1ms [Install] WantedBy=timers.targethelloworld.timer里并没有声明service的名称,那它和service是如何关联的呢?没错,因为它们的名称相同,都是helloworld。Wenn Sie möchten, dass das gesamte System diesen Timer verwendet, müssen diese beiden Dateien abgelegt werden
/etc/systemd/system. Wenn Sie es für einen bestimmten Benutzer verwenden möchten, platzieren Sie es in ~/.config/systemd/user. Wenn Sie möchten, dass dieser Timer sofort ausgeführt wird, müssen Sie den folgenden Befehl ausführen: Das Tag –now
insystemctl enable --now helloworld.timerbewirkt, dass der Timer sofort ausgeführt wird. Andernfalls wird der Vorgang erst nach einem Neustart des Systems oder nach der Anmeldung des Benutzers ausgelöst. Die Funktionen jedes Felds im Abschnitt
[Timer] sind wie folgt:
OnBootSec und OnUnitActiveSec entfernen und sie wie folgt durch OnCalendar ersetzen ist ein Beispiel:
OnCalendar=*-*-* *:*:00,10,20,30,40,50Schließlich sind der SystemD-Timer und der Dienst standardmäßig mit demselben Namen verknüpft. Wenn Sie möchten, können Sie ihn auch im
[Timer] koppeln Angabe des Feldes Einheit.
Die oben genannten Methoden können alle geplante Aufgaben mit einer Granularität von weniger als einer Minute implementieren. Jedes hat seine Vorteile. SystemD-Timer sehen formeller, aber etwas komplexer aus. Obwohl die Crontab+sleep-Methode umständlich ist, ist sie für einige kleine Aufgaben nicht ungeeignet.
Das obige ist der detaillierte Inhalt vonSo veranlassen Sie Crontab, jede Sekunde eine Aufgabe auszuführen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!