Detaillierte Erläuterung der Verwendung und Vorsichtsmaßnahmen von Crontab unter Linux

Detaillierte Erläuterung der Verwendung und Vorsichtsmaßnahmen von Crontab unter Linux

Crontab ist ein Befehl zum Einrichten einer periodischen Ausführung. Sein Daemon-Prozess ist crond. Es gibt zwei Konfigurationsmodi von crontab, einen auf Benutzerebene und einen auf Systemebene. Wir werden sie hier separat besprechen.

Crontab auf Benutzerebene

Wenn Benutzer einen neuen zyklischen Jobplan erstellen, steht der verwendete Crontab-Befehl crontab -e allen Benutzern zur Verfügung. Normale Benutzer können nur für sich selbst geplante Aufgaben festlegen. Dann automatisch nach /var/spool/cron/usename schreiben

Benutzerkontrolldatei

/etc/cron.allow:
Schreiben Sie die Benutzer, die crontab verwenden können. Nur die Benutzer in dieser Datei können crontab verwenden, was einer Whitelist entspricht.

/etc/cron.deny:
Schreiben Sie die Benutzer, denen die Verwendung von crontab untersagt ist. Nur den Benutzern in dieser Datei ist die Verwendung von crontab untersagt, was einer schwarzen Liste entspricht. /etc/cron.allow hat eine höhere Priorität als /etc/cron.deny. Um Verwirrung zu vermeiden, wird empfohlen, nur eine davon zu verwenden.

Befehl

crontab [-u Benutzername] [-l|-e|-r] 
Parameter: 
-u: Nur Root kann diese Aufgabe ausführen, d. h. anderen Benutzern beim Erstellen/Löschen der Crontab-Arbeitsplanung helfen. -e: Ruft vi auf, um den Arbeitsinhalt von Crontab zu bearbeiten. -l: Listet den Arbeitsinhalt von Crontab auf. -r: Löscht den gesamten Crontab-Arbeitsinhalt.

Grammatik

# .---------------- Minuten (0 - 59) 
# | .------------- Stunden (0 - 23)
# | | .---------- Datum (1 - 31)
# | | | .------- Monat (1 – 12) ODER Jan, Feb, Mär, Apr ...
# | | | | .---- Wochentag (0 - 6) (Sonntag=0 oder 7) ODER So, Mo, Di, Mi, Do, Fr, Sa
# | | | | |
# * * * * * Befehl

Die Syntax ist der Crontab auf Systemebene sehr ähnlich. Der Unterschied besteht darin, dass hier der Ausführungsbenutzer nicht angegeben werden muss, während dies in der Crontab auf Systemebene (/etc/crontab) erforderlich ist.

Hier sind einige Beispiele:

*/10 * * * * /home/test.sh #Führen Sie das Skript /home/test.sh alle 10 Minuten als aktueller Benutzer aus 0 2 * * * /home/test.sh #Jeden Tag um 2 Uhr 0 5,17 * * * /home/test.sh #Jeden Tag um 5 Uhr und 17 Uhr 0 17 * * sun /home/test.sh #Jeden Sonntag um 17 Uhr 0 4,17 * * sun,mon /home/test.sh #Jeden Montag und Sonntag @reboot /home/test.sh #Beim Neustart des Systems

Hier ist ein Online-Tool empfohlen: Generieren Sie Cron-Ausdrücke online

Systemweite Crontab

Crontab auf Systemebene wird im Allgemeinen für Routineaufgaben des Systems verwendet. Diese Methode ist bequemer und direkter, um geplante Aufgaben für andere Benutzer festzulegen, und kann auch die Ausführung von Shells usw. angeben. Die Konfigurationsdatei ist /etc/crontab und kann nur vom Root-Benutzer bearbeitet werden.

Bearbeiten Sie /etc/crontab

Der Standardinhalt ist wie folgt:

SHELL=/bin/bash Hiermit geben Sie an, welche Shell-Schnittstelle verwendet werden soll PATH=/sbin:/bin:/usr/sbin:/usr/bin Hiermit geben Sie den Dateisuchpfad an MAILTO=root Wenn es einen zusätzlichen STDOUT gibt, an den die Daten per E-Mail gesendet werden, können Sie einen Systembenutzer oder eine E-Mail-Adresse angeben, z. B. [email protected]
# Weitere Einzelheiten finden Sie unter man 4 crontabs
# Beispiel einer Jobdefinition:
# .---------------- Minuten (0 - 59) 
# | .------------- Stunden (0 - 23)
# | | .---------- Datum (1 - 31)
# | | | .------- Monat (1 – 12) ODER Jan, Feb, Mär, Apr ...
# | | | | .---- Wochentag (0 - 6) (Sonntag=0 oder 7) ODER So, Mo, Di, Mi, Do, Fr, Sa
# | | | | |
# * * * * * Benutzername-Befehl

Im Augenblick:

Ausführen von Benutzeraufgabenbefehlen in täglichen, monatlichen und wöchentlichen Zeiträumen

Wenn ich beispielsweise eine geplante Aufgabe hinzufügen möchte, um das Skript /home/test.sh alle 10 Minuten als Root auszuführen, würde ich Folgendes hinzufügen:

*/10 * * * * root /home/test.sh

Beachten Sie, dass Sie den Executor-Root nicht auslassen sollten (der Executor muss nicht in der Crontab auf Benutzerebene angegeben werden). Andernfalls wird im Protokoll /var/log/cron der Fehler „ERROR (getpwnam() fehlgeschlagen)“ angezeigt und die geplante Aufgabe wird nicht ordnungsgemäß ausgeführt.

Starten Sie den Dienst neu

Im Allgemeinen liest crontab unter Linux die Routineaufgaben in /etc/crontab jede Minute automatisch neu. Aus bestimmten Gründen oder in anderen Unix-Systemen wird crontab jedoch in den Speicher gelesen, sodass es nach der Änderung von /etc/crontab möglicherweise nicht sofort ausgeführt wird. Zu diesem Zeitpunkt müssen Sie den crontab-Dienst neu starten.

Hier nehmen wir CentOS als Beispiel:

service crond start //Dienst starten service crond stop //Dienst beenden service crond restart //Dienst neu starten service crond reload //Konfiguration neu laden service crond status //Dienststatus

Wenn es CentOS 7 ist:

systemctl restart crond.service //Dienst neu startensystemctl start crond.service //Dienst startensystemctl stop crond.service //Dienst stoppensystemctl reload crond.service //Konfiguration neu ladensystemctl status crond.service //Dienststatus

Weitere Überlegungen

Unterdrücken unerwünschter Ausgaben

Wenn in den Ausführungsergebnissen oder Ausführungsoptionen Ausgabedaten vorhanden sind, werden die Daten per E-Mail an das von MAILTO angegebene Konto gesendet. Wenn ein bestimmter Zeitplan immer wieder fehlschlägt und ein Problem mit dem E-Mail-Dienst vorliegt (tatsächlich habe ich diesen Dienst überhaupt nicht aktiviert), wird eine große Anzahl von Dateien in /var/spool/clientmqueue/ generiert. Daher ist es am besten, nach dem Befehl in crontab > /dev/null 2>&1 hinzuzufügen

2>: Umleitungsfehler.
2>&1: Fehler dorthin umleiten, wo die Ausgabe hin soll. Das heißt, das Ausführungsergebnis des obigen Befehls wird nach /dev/null umgeleitet bzw. verworfen, und gleichzeitig werden die generierten Fehler verworfen.

Überprüfen Sie die Protokolle

Protokolle werden in /var/log/cron gespeichert.

Grammatische Unterschiede

  • Der Befehl crontab -e überprüft die Syntax, während dies bei der Bearbeitung von /etc/crontab durch vim nicht der Fall ist. Beachten Sie, dass für crontab -e der Benutzername des Executors nicht erforderlich ist, während /etc/crontab angegeben werden muss.
  • Der Ausführungspfad muss ein absoluter Pfad sein. Andernfalls wird die Ausführung möglicherweise nicht normal fortgesetzt.
  • Wochen, Tage und Monate können nicht koexistieren, das heißt, Sie können nach Woche, Tag oder Monat zyklisch arbeiten, aber Sie können keinen Modus „Tag des Monats und Wochentag“ angeben.

Verweise

Bird Brothers Linux Private Kitchen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Django-crontab implementiert Beispielcode für geplante Aufgaben auf dem Server
  • So führen Sie den Taskplan crontab alle paar Minuten in einem bestimmten Zeitraum unter Linux automatisch aus
  • Verwenden Sie crontab, um das Skript zur regelmäßigen Ausführung des JAR-Programms in centOS6 auszuführen
  • Laravel löst das Problem, dass Crontab nicht ausgeführt wird
  • So benachrichtigen Sie Benutzer per E-Mail über die Ergebnisse der Crontab-Ausführung
  • Analyse der Funktionsweise des Django-Crontab-Timing-Task-Moduls

<<:  Methode zur Implementierung von Leistungstests der MySQL-Datenbank durch das Sysbench-Tool

>>:  JavaScript verwendet häufig Array-Deduplizierung tatsächliche Kampf Quellcode

Artikel empfehlen

Beispiel-Tutorial zur Verwendung der Summenfunktion in MySQL

Einführung Heute werde ich die Verwendung der Sum...

Detaillierte Erklärung der Box-Größe in CSS3 (Content-Box und Border-Box)

Box-Größe in CSS3 (Inhaltsbox und Rahmenbox) Mit ...

Was Sie über Filter in Vue wissen müssen

Inhaltsverzeichnis Vorwort Was ist ein Filter So ...

Mehrere praktische Szenarien zur Implementierung der Ersetzungsfunktion in MySQL

REPLACE Syntax REPLACE(String,from_str,to_str) Da...

Detaillierte Erläuterung des zeitgesteuerten Protokollschneidens von Nginx

Vorwort Standardmäßig werden Nginx-Protokolle in ...

Ein kurzes Verständnis der Unterschiede zwischen MySQL InnoDB und MyISAM

Vorwort MySQL unterstützt viele Arten von Tabelle...

uni-app implementiert NFC-Lesefunktion

In diesem Artikel wird der spezifische Code der U...

Navigationsdesign und Informationsarchitektur

<br />Wenn wir über Navigation sprechen, geh...