Der Befehl crontab wird von Unix und Linux verwendet, um Anweisungen für die periodische Ausführung einzurichten. Es handelt sich dabei um eine im Internet weit verbreitete Technologie. Viele Aufgaben werden in crontab für die zyklische Ausführung eingerichtet. Wenn Crontab nicht verwendet wird, handelt es sich bei der Aufgabe um ein residentes Programm, das hohe Anforderungen an Ihr Programm stellt. Eine Anforderung ist, dass Ihr Programm rund um die Uhr einsatzbereit sein muss, und die andere ist, dass Ihr Planungsprogramm zuverlässig sein muss. Bei der tatsächlichen Arbeit müssen 90 % der Programme nicht so viel Zeit und Energie aufwenden, um die beiden oben genannten Probleme zu lösen. Sie müssen nur Ihre eigene Geschäftslogik schreiben und sie über Crontab planen, ein Programm für den industriellen Einsatz. Es sollte keinen Zweifel an der Zuverlässigkeit und Robustheit von Crontab geben. Eine einfache Einführung in den Crontab-Befehl Angenommen, ich möchte eine Aufgabe festlegen, um Daten jede Minute zu synchronisieren. Der Pfad dieses Synchronisierungsskripts lautet /home/blue/do/rsyncfile.sh. Dann kann ich es wie folgt konfigurieren. Als Benutzer blue gebe ich im Terminal ein: crontab -e # Sie gelangen dann zum vi-Bearbeitungsbildschirm, damit Sie Ihre Arbeit bearbeiten können! Beachten Sie, dass jeder Job eine Zeile ist. #Zeitteilung Tag, Monat, Woche|<================Die vollständige Befehlszeile für die Aufgabe * * * * * /home/blue/do/rsyncfile.sh Standardmäßig kann jeder Benutzer, der nicht in /etc/cron.deny enthalten ist, direkt „crontab -e“ ausgeben, um seine eigenen Routinebefehle zu bearbeiten! Der gesamte Vorgang ist genau wie oben beschrieben. Sie gelangen zum Bearbeitungsbildschirm von vi und bearbeiten dann jeweils eine Zeile. Geben Sie nach der Bearbeitung ":wq" ein, um vi zu speichern und zu beenden! Wenn wir das Skript so ändern müssen, dass die Datensynchronisierung alle 5 Minuten ausgeführt wird, können wir auch crontab -e verwenden, um den Editor aufzurufen: */5 * * * * /home/blue/do/rsyncfile.sh Wenn es ein Problem mit dem Server gibt und die Daten einen Tag lang nicht synchronisiert werden, müssen wir die Daten ergänzen. Angenommen, das Skript zum Ergänzen der Daten lautet /home/blue/do /rsyncfile_day.sh. Allerdings ist tagsüber die Spitzenzeit und nachts, also in der Nebenzeit, gibt es nicht viele Benutzer. Das Ergänzen der Daten wird viel Bandbreite beanspruchen, insbesondere tagsüber, was den normalen Geschäftsbetrieb beeinträchtigt. Daher können wir die Aufgabe zum Ergänzen der Daten im Allgemeinen um 2 Uhr morgens starten lassen und dann mit crontab -e den Editor aufrufen: 0 2 1 4 * /home/blue/do/rsyncfile_day.sh Auf diese Weise wird unser Datenergänzungsskript am 1. April um 2:00 Uhr gestartet. Das Synchronisieren von Daten ist eine sehr häufige Aufgabe in Internetunternehmen. Hier sehen Sie den Charme von crontab. Sie müssen nur die einfachste Geschäftslogik schreiben und die Planung crond überlassen, um eine Aufgabe mit hoher Zuverlässigkeit abzuschließen. Wenn Sie diese Art von Planungsprogramm selbst schreiben möchten, weiß ich nicht, wie viel Aufwand erforderlich ist, um es zuverlässig und stabil zu machen. Syntax des crontab-Befehls crontab [-u Benutzername] [-l|-e|-r] Optionen und Parameter: -u: Nur Root kann diese Aufgabe ausführen, d. h. anderen Benutzern beim Erstellen/Entfernen von Crontab-Aufgabenplänen helfen. -e: Crontab-Job-Inhalt bearbeiten -l: Crontab-Job-Inhalt anzeigen -r: Alle Crontab-Job-Inhalte entfernen. Wenn Sie nur ein Element entfernen möchten, verwenden Sie bitte -e zum Bearbeiten Aktuellen Crontab-Inhalt des Benutzers abfragen: crontab -l */5 * * * * /home/blue/do/rsyncfile.sh 0 2 1 4 * /home/blue/do/rsyncfile_day.sh Löschen Sie die aktuelle Crontab des Benutzers: crontab -r crontab -l kein Crontab für blau Wenn Sie eine Crontab-Aufgabe des aktuellen Benutzers löschen möchten, rufen Sie den Editor mit crontab -e auf und löschen Sie anschließend die entsprechende Aufgabe. Einschränkungen des crontab-Befehls In Bezug auf die Priorität hat /etc/cron.allow Vorrang vor /etc/cron.deny. Dem oben Gesagten nach zu urteilen, wird nur eine dieser beiden Dateien zur Einschränkung ausgewählt. Daher wird empfohlen, nur eine zu behalten, um Ihre Beurteilung der Konfiguration nicht zu beeinträchtigen! Im Allgemeinen behält das System /etc/cron.deny standardmäßig bei. Sie können den Benutzer, der crontab nicht ausführen soll, in /etc/cron.deny eintragen, ein Konto pro Zeile! Detaillierte Erklärung der Crontab-Konfigurationsdatei Das ist crontab -e. Diese crontab ist eigentlich die laufende Datei /usr/bin/crontab, aber /etc/crontab ist eine „einfache Textdatei“ und muss als Root bearbeitet werden. Schauen wir uns zunächst den Inhalt der Crontab-Datei an Katze /etc/crontab # /etc/crontab: systemweite Crontab # Im Gegensatz zu jeder anderen Crontab müssen Sie die `crontab' nicht ausführen # Befehl zum Installieren der neuen Version, wenn Sie diese Datei bearbeiten # und Dateien in /etc/cron.d. Diese Dateien haben auch Benutzernamenfelder, # was keine der anderen Crontabs tut. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # mh dom monitor dow Benutzerbefehl 17 * * * * root-cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root-Test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) Diese Datei ist fast genau identisch mit dem Inhalt des crontab -e, das wir gerade ausgegeben haben! Es gibt nur wenige Orte, die anders sind PATH=....: Hier ist der Suchpfad zum Aufruf der Run-Datei! Die Verwendung der Standard-Pfadkonfiguration ist ausreichend! 17 * * * * root-cd / && run-parts --report /etc/cron.hourly: Diese Wie lautet also die folgende Befehlsfolge? Sie können Wissen Sie jetzt, wie das System standardmäßig eine Reihe von Routineaufgaben plant? Wenn Sie Angenommen, Sie möchten ein Verzeichnis erstellen, sodass das System alle 2 Minuten alle ausführbaren Dateien in diesem Verzeichnis ausführen kann. Sie können die folgende Zeile in /etc/crontab schreiben: */2 * * * * root-Ausführungsteile /etc/cron.min Natürlich muss das Verzeichnis /etc/cron.min vorhanden sein! Was ist, wenn ich nur ein „Programm“ ausführen muss und kein Verzeichnis benötige? Was sollte ich tun? Wenn wir beispielsweise Netzwerkverkehr erkennen, möchten wir ihn alle fünf Minuten erkennen und analysieren. Wir können es wie folgt schreiben: */5 * * * * root /bin/mrtg /etc/mrtg/mrtg.cfg Wie! Das Erstellen von Routinebefehlen ist einfach! Wenn Sie Systemadministrator sind und Ihre Aufgabe die routinemäßige Systemwartung ist, können Sie die Datei /etc/crontab direkt ändern! Es ist bequem und einfach zu verwalten! Das Prinzip des Crontab-Befehls Wenn ein Benutzer den Befehl crontab verwendet, um einen Aufgabenplan zu erstellen, wird die Aufgabe in Die Mindesterkennungsgrenze des Crond-Dienstes beträgt „Minuten“, sodass „cron den Dateninhalt in Hinweis: Crontab unter Linux hilft uns automatisch, die Routineaufgaben in Detaillierte Erklärung des Crontab-Befehlsformats Das Format jeder Aufgabe (jede Zeile) besteht aus sechs Feldern. Die Bedeutung dieser sechs Felder ist:
Das interessantere ist das „Zhou“! Wenn die Wochenzahl 0 oder 7 ist, bedeutet sie „Sonntag“! Darüber hinaus gibt es noch einige Hilfszeichen, die in etwa wie folgt lauten:
Zhou und Sonne und Mond können nicht koexistieren Ein weiterer zu beachtender Punkt ist: „Sie können als Zyklus Wochen oder Tage und Monate verwenden, Sie können jedoch nicht nach einem ‚Monat und Wochentag‘-Modell arbeiten.“ Dies bedeutet, dass Sie keinen Aufgabenplan wie diesen schreiben können: 30 12 11 9 5 root echo "nur testen" <==Das ist falsch Ursprünglich dachten Sie, dass diese Aufgabe nur ausgeführt wird, wenn der 11. September auf einen Freitag fällt. Leider kann das System festlegen, dass diese Aufgabe jeden Freitag oder jedes Jahr am 11. September ausgeführt werden soll. Dies weicht von Ihrem ursprünglichen Plan ab. Sie müssen diesen Punkt also beachten! Die obige Beschreibung ist falsch! Zeigen Sie den Crontab-Ausführungsverlauf unter CentOS an Ich habe eine geplante Aufgabe zu crontab hinzugefügt, aber nicht das erwartete Ergebnis erhalten. Ich vermutete, dass crontab die entsprechende Aufgabe nicht ausführte. Aber wie kann ich feststellen, ob crontab ausgeführt wird? Hierzu muss der Ausführungsverlauf von Crontab angezeigt werden. Der genaue Speicherort lautet wie folgt: cd /var/log Schwanz -100 Cron Sie können die zugehörigen geplanten Aufgaben überprüfen, die in der Cron-Datei ausgeführt wurden. Beschreibung des Crontab-Befehlsformats Wir können crontab -e verwenden, um auszuführende Befehle hinzuzufügen. Das Ergebnis der Befehlsausführung, ob Standardausgabe oder Fehlerausgabe, wird dem Benutzer per E-Mail übermittelt. Der hinzugefügte Befehl muss das folgende Format haben: * * * * * /Befehlspfad Die ersten fünf Felder können ganzzahlige Werte annehmen, um anzugeben, wann mit der Arbeit begonnen werden soll, und das sechste Feld ist eine Zeichenfolge, d. h. das Befehlsfeld, das den Befehl enthält, dessen Ausführung durch crontab geplant ist. Die einzelnen Felder sind durch Leerzeichen und Tabulatoren getrennt. Die ersten fünf Felder stehen für:
Es können auch einige Sondersymbole verwendet werden:
Einige Beispiele: 00 8,12,16 * * * /data/app/scripts/monitor/df.sh 30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh 10 8,12,16 * * * /data/app/scripts/monitor/check_ind_unusable.sh 10 8,12,16 * * * /data/app/scripts/monitor/check_maxfilesize.sh 10 8,12,16 * * * /data/app/scripts/monitor/check_objectsize.sh :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3s::::::333:33333333333333333333ag33333333333333333333333333333 es333333333333333333333333333333 es33 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann dann dann dann aber33333333333333333333 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 dann3 dann3 aber3 dann3 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann nichtie dasen aber aber abersossoss aberstens aberstensss aberten aber abers :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3s::::::333:33333333333333333333ag33333333333333333333333333333 es333333333333333333333333333333 es33 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann dann dann dann aber33333333333333333333 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 dann3 dann3 aber3 dann3 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann nichtie dasen aber aber abersossoss aberstens aberstensss aberten aber abers ::::::::::: Crontab-Befehl im Hintergrund ausführen & Wenn ein Job im Vordergrund läuft, wird das Terminal durch den Job belegt; wenn ein Job im Hintergrund läuft, belegt er das Terminal nicht. Mit dem Befehl & können Sie den Job zur Ausführung in den Hintergrund stellen. wie: 30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh & Seien Sie vorsichtig, wenn Sie Jobs im Hintergrund ausführen: Führen Sie keine Befehle im Hintergrund aus, die eine Benutzerinteraktion erfordern, denn dann bleibt Ihr Computer einfach stehen und wartet. Im Hintergrund laufende Jobs geben jedoch weiterhin Ergebnisse auf dem Bildschirm aus und stören so Ihre Arbeit. Wenn der Job, den Sie im Hintergrund ausführen möchten, eine große Ausgabe erzeugt, leiten Sie seine Ausgabe am besten mit der folgenden Methode in eine Datei um: wie: Befehl >out.file 2>&1 & In diesem Beispiel bedeutet 2>&1, dass die gesamte Standardausgabe und Fehlerausgabe in eine Datei namens out.file umgeleitet werden. Crontab-Befehl 2>&1 Bedeutung Schauen wir uns ein Beispiel an: 0 2 * * * /u01/test.sh >/dev/null 2>&1 & Dieser Satz bedeutet, diesen Befehl im Hintergrund auszuführen, Fehlerausgabe 2 auf Standardausgabe 1 umzuleiten und dann die gesamte Standardausgabe 1 in die Datei /dev/null zu verschieben, d. h. zu löschen. Hier sind einige Zahlen, die Folgendes bedeuten:
Wir könnten auch schreiben: 0 2 * * * /u01/test.sh 1>/u01/out.file & 0 2 * * * /u01/test.sh 2>/u01/out.file & 0 2 * * * /u01/test.sh 2>/u01/out.file 2>&1 & Leiten Sie die Ausgabe des Befehls tesh.sh nach out.file um, d. h. der Ausgabeinhalt wird nicht auf dem Bildschirm gedruckt, sondern in die Datei out.file ausgegeben. 2>&1 leitet die Fehlerausgabe zur Standardausgabe um. Leiten Sie dann die Standardeingabe zur Datei out.file um. &1 steht für die Dateibeschreibung 1, also für die Standardausgabe. Fehlt hier &, wird daraus die Zahl 1, was eine Umleitung auf Datei 1 bedeutet. &: Ausführung im Hintergrund prüfen:
Der Grund, warum der Crontab-Befehl 2>&1 am Ende steht
Zunächst leitet command > file die Standardausgabe in eine Datei um, und 2>&1 ist der Standardfehler, der die Standardausgabe kopiert, die ebenfalls in eine Datei umgeleitet wird. Das Endergebnis ist, dass sowohl die Standardausgabe als auch der Fehler in eine Datei umgeleitet werden. Bei Änderung in: command 2>&1 >file 2>&1 Standardfehler kopiert das Verhalten der Standardausgabe, aber die Standardausgabe befindet sich weiterhin im Terminal. >Datei Die Ausgabe wird in eine Datei umgeleitet, aber der Standardfehler bleibt im Terminal bestehen. Erkenntnisse: Ich plane, jeden Abend um 23:00 Uhr ein Python-Skript auf dem Server auszuführen, um die MySql-Datenbank zu sichern. Der Befehl lautet wie folgt: * 23 * * * python /var/www/html/crontab_python/back_db.py >/dev/null 2>&1 Als Ergebnis wurden jedes Mal 60 Sicherungsdateien erstellt. Nach sorgfältiger Überprüfung des geplanten Task-Befehls stellte ich fest, dass an der Position „Minute“ eine „0“ fehlte, da „*“ an dieser Position einen beliebigen Wert darstellt. Die Änderung lautet wie folgt: 0 23 * * * python /var/www/html/crontab_python/back_db.py >/dev/null 2>&1 Anschließend erfolgt die planmäßige Ausführung des PHP-Skripts 0 4 * * * /usr/local/php/bin/php /usr/local/nginx/www/backup-db/backup_db.php 172.16.8.26 >/dev/null 2>&1 0 4 * * * /usr/local/php/bin/php /usr/local/nginx/www/backup-db/backup_db.php 172.16.10.151 >/dev/null 2>&1 Dieser Artikel stellt die detaillierte Verwendung des Crontab-Befehls für geplante Linux-Aufgaben vor und fasst einige Verwendungstipps für den Crontab-Befehl sowie einige Lösungen für bei der Arbeit auftretende Probleme zusammen. Ich hoffe, er wird für alle hilfreich sein Das könnte Sie auch interessieren:
|
<<: JavaScript-Code zur Implementierung der Weibo-Batch-Unfollow-Funktion
>>: Das Implementierungsprinzip der MySQL-Master-Slave-Synchronisation
Keepalive wird häufig zum Caching in Vue-Projekte...
Das Betrachten einer Website ist eigentlich wie di...
Drop-Shadow und Box-Shadow sind beide CSS-Eigensc...
Vorwort Ich habe bereits einen Artikel über REM-A...
Vielen Leuten wird das Kompilieren erklärt, sobal...
1. Übersicht über SQLException Wenn bei der Verwe...
Einstellungen für Hintergrundfarbe und Transparen...
Inhaltsverzeichnis 1 Was ist eine Container-Cloud...
Kürzlich stieß ich auf eine Datenbank mit folgend...
Manchmal möchten Sie eine App testen, aber nicht ...
In diesem Artikel wird der spezifische Code des W...
Detailliertes Beispiel einer MySQL-Austauschparti...
1. Rasterlayout (Raster): Es unterteilt die Webse...
Bei der Verwendung von IIS als Server wurde die A...
Auf Webseiten begegnen wir häufig dieser Situatio...