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

Entpackte Version der MySQL-Installation und aufgetretene Fehler und Lösungen

1 Installation Laden Sie die entsprechende entpac...

Anwendung von CSS3-Animationseffekten in Aktivitätsseiten

Hintergrund Ehe wir uns versehen, neigt sich ein ...

Detaillierte Erklärung zur korrekten Verwendung der if-Funktion in MySQL

Für das, was ich heute schreiben werde, lief das ...

MySQL sollte niemals Update-Anweisungen wie diese schreiben

Inhaltsverzeichnis Vorwort Ursache Phänomen warum...

Bauprozess eines privaten Docker-Lagerhafens

1. Vorbereitung 1.1 Hafen herunterladen Harbor-Do...

Wie InnoDB die Serialisierungsisolationsebene implementiert

Serialisierungsimplementierung InnoDB implementie...

So konfigurieren Sie Nginx zur Unterstützung von IPv6 unter Linux

1. Überprüfen Sie, ob das vorhandene Nginx IPv6 u...

Änderung und Abfrage von Python MySQL-Datenbanktabellen

Python stellt eine Verbindung zu MySQL her, um Da...

Tutorial zur HTML-Tabellenauszeichnung (37): Hintergrundbild-Attribut BACKGROUND

Legen Sie das Hintergrundbild für die Tabellenübe...

html Option deaktivieren auswählen auswählen deaktivieren Option Beispiel

Code kopieren Der Code lautet wie folgt: <Ausw...

Zusammenfassung der Methoden zum Abfragen von MySQL-Benutzerberechtigungen

Einführung von zwei Methoden zum Anzeigen von MyS...