Das Linux-System wird vom Systemdienst cron (crond) gesteuert. Auf dem Linux-System sind viele Aufgaben geplant, daher wird dieser Systemdienst standardmäßig gestartet. Da Benutzer außerdem geplante Aufgaben auch selbst festlegen können, stellt das Linux-System Benutzern auch den Befehl zur Steuerung geplanter Aufgaben zur Verfügung: den Befehl crontab.
1. Einführung in crond
crond ist ein Daemon-Prozess unter Linux, der dazu dient, regelmäßig bestimmte Aufgaben auszuführen oder auf die Verarbeitung bestimmter Ereignisse zu warten Nach Abschluss des Betriebssystems wird dieses Servicetool standardmäßig installiert und der Crond-Prozess automatisch gestartet. Der Crond-Prozess prüft regelmäßig, ob Aufgaben ausgeführt werden müssen wird automatisch ausgeführt.
Aufgabenplanung unter Linux ist in zwei Kategorien unterteilt: Systemaufgabenplanung und Benutzeraufgabenplanung.
Systemaufgabenplanung: Arbeit, die das System regelmäßig ausführt, z. B. das Schreiben zwischengespeicherter Daten auf die Festplatte, Protokollbereinigung usw. Im Verzeichnis /etc befindet sich eine Crontab-Datei, die Konfigurationsdatei für die Systemaufgabenplanung.
/etc/crontab-Datei enthält die folgenden Zeilen:
cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin: /bin:/usr/sbin:/usr/bin
MAILTO=HOME=/
# run-parts
51 * * * * root run-parts /etc /cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
Die ersten vier Zeilen werden verwendet, um die Umgebungsvariablen für die Ausführung von Crond-Tasks zu konfigurieren System, das verwendet werden soll Welche Shell, hier ist Bash, die PATH-Variable in der zweiten Zeile gibt den Pfad an, unter dem das System den Befehl ausführt, und die MAILTO-Variable in der dritten Zeile gibt die Crond-Task-Ausführungsinformationen an, die an den Root-Benutzer gesendet werden per E-Mail. Wenn der Wert der MAILTO-Variable leer ist, bedeutet dies, dass keine Informationen zur Aufgabenausführung an den Benutzer gesendet werden. Die HOME-Variable in der vierten Zeile gibt das Home-Verzeichnis an, das beim Ausführen von Befehlen oder Skripten verwendet wird. Die Bedeutung der Zeilen sechs bis neun wird im nächsten Abschnitt ausführlich beschrieben. Hier gibt es nicht viel zu sagen.
Benutzeraufgabenplanung: Aufgaben, die Benutzer regelmäßig ausführen müssen, z. B. Benutzerdatensicherung, regelmäßige E-Mail-Erinnerungen usw. Benutzer können das Crontab-Tool verwenden, um ihre eigenen geplanten Aufgaben anzupassen. Alle benutzerdefinierten Crontab-Dateien werden im Verzeichnis /var/spool/cron gespeichert. Sein Dateiname stimmt mit dem Benutzernamen überein.
Benutzerberechtigungsdatei:
Datei:
/etc/cron.deny
Beschreibung:
In dieser Datei sind Benutzer aufgeführt Der Crontab-Befehl darf nicht verwendet werden.
Datei:
/etc/cron.allow
Beschreibung:
Die in dieser Datei aufgeführten Benutzer dürfen dies nicht Verwenden Sie den Crontab-Befehl
Datei:
/var/spool/cron/
Beschreibung:
Das Verzeichnis, in dem alle Benutzer-Crontab-Dateien gespeichert sind, benannt nach dem Benutzernamen
Bedeutung der Crontab-Datei:
In der vom Benutzer erstellten Crontab-Datei stellt jede Zeile eine Aufgabe dar und jedes Feld in jeder Zeile stellt eine Einstellung dar. Sein Format ist unterteilt In sechs Felder unterteilt, sind die ersten fünf Segmente Zeiteinstellungssegmente und das sechste Segment ist das auszuführende Befehlssegment. Das Format ist wie folgt:
Minute Stunde Tag Monat Woche Befehl
wobei:
Minute: stellt die Minute dar, die eine beliebige Ganzzahl von 0 bis 59 sein kann.
Stunde: stellt die Stunde dar, die eine beliebige Ganzzahl von 0 bis 23 sein kann.
Tag: stellt das Datum dar, das eine beliebige Ganzzahl von 1 bis 31 sein kann.
Monat: stellt den Monat dar, der eine beliebige Ganzzahl von 1 bis 12 sein kann.
Woche: Gibt den Wochentag an, der eine beliebige Ganzzahl von 0 bis 7 sein kann, wobei 0 oder 7 den Sonntag darstellt.
Befehl: Der auszuführende Befehl kann ein Systembefehl oder eine von Ihnen selbst geschriebene Skriptdatei sein.
In jedem der oben genannten Felder können Sie auch die folgenden Sonderzeichen verwenden:
Sternchen (*): steht für alle möglichen Werte, zum Beispiel für den Monat Das Feld ist ein Sternchen. Dies bedeutet, dass die Befehlsoperation jeden Monat ausgeführt wird, nachdem die Einschränkungen anderer Felder erfüllt sind.
Komma (,): Sie können einen Listenbereich mit durch Kommas getrennten Werten angeben, zum Beispiel „1,2,5,7,8,9“
Mittelstrich (-) : Sie können einen Bindestrich zwischen Ganzzahlen verwenden, um einen Ganzzahlbereich darzustellen. „2-6“ bedeutet beispielsweise „2,3,4,5,6“
Schrägstrich (/): Sie können einen verwenden Schrägstrich zur Angabe der Zeitintervallhäufigkeit, z. B. „0-23/2“ bedeutet Ausführung alle zwei Stunden. Gleichzeitig können Schrägstriche zusammen mit Sternchen verwendet werden, z. B. */10. Wenn sie im Minutenfeld verwendet werden, bedeutet dies, dass sie alle zehn Minuten ausgeführt werden.
2. Crond-Dienst
Crontab installieren:
yum install crontabs
Bedienungsanweisungen für den Dienst:
/sbin/service crond start //Dienst starten
/sbin/service crond stop //Dienst schließen
/sbin/service crond restart //Dienst neu starten
/sbin/service crond reload // Laden Sie die Konfiguration neu
/sbin/service crond status //Starten Sie den Dienst
Überprüfen Sie, ob der Crontab-Dienst so eingestellt ist, dass er beim Booten startet, und führen Sie den Befehl aus:
ntsysv
Automatischen Start beim Booten hinzufügen:
chkconfig –level 35 crond on
3. Detaillierte Erklärung des Crontab-Befehls
1. Befehlsformat:
crontab [-u Benutzer] Datei
crontab [-u Benutzer] [ -e | -l |]
2. Befehlsfunktion:
Über den Befehl crontab können wir bestimmte Systembefehle oder Shell-Skripte in festen Abständen ausführen. Die Einheit des Zeitintervalls kann Minuten, Stunden, Tage, Monate, Wochen oder eine beliebige Kombination der oben genannten sein. Dieser Befehl eignet sich sehr gut für die regelmäßige Protokollanalyse oder Datensicherung und andere Aufgaben.
3. Befehlsparameter:
-u Benutzer: Wird zum Festlegen des Crontab-Dienstes eines bestimmten Benutzers verwendet. „-u ixdba“ bedeutet beispielsweise, dass der Crontab-Dienst des ixdba-Benutzers festgelegt wird Benutzer.
Datei: Datei ist der Name der Befehlsdatei, was bedeutet, dass die Datei als Aufgabenlistendatei von Crontab verwendet und in Crontab geladen wird. Wenn diese Datei nicht in der Befehlszeile angegeben ist, akzeptiert der Befehl crontab Befehle, die über die Standardeingabe (Tastatur) eingegeben werden, und lädt sie in crontab.
-e: Bearbeiten Sie den Inhalt der Crontab-Datei eines Benutzers. Wenn kein Benutzer angegeben ist, bedeutet dies, dass die Crontab-Datei des aktuellen Benutzers bearbeitet wird.
-l: Zeigt den Inhalt der Crontab-Datei eines bestimmten Benutzers an. Wenn der Benutzer nicht angegeben ist, bedeutet dies, dass der Inhalt der Crontab-Datei des aktuellen Benutzers angezeigt wird.
-r: Crontab-Datei eines Benutzers aus dem Verzeichnis /var/spool/cron löschen. Wenn kein Benutzer angegeben ist, wird standardmäßig die Crontab-Datei des aktuellen Benutzers gelöscht.
-i: Geben Sie beim Löschen der Crontab-Datei des Benutzers eine Bestätigungsaufforderung ein.
4. Gängige Methoden:
1). Erstellen Sie eine neue Crontab-Datei
Bevor Sie erwägen, eine Crontab-Datei an den Cron-Prozess zu senden, müssen Sie zunächst die Umgebungsvariable EDITOR festlegen. Der Cron-Prozess ermittelt damit, welcher Editor zum Bearbeiten der Crontab-Datei verwendet werden soll. 99 % der UNIX- und LINUX-Benutzer verwenden vi. Wenn dies bei Ihnen der Fall ist, bearbeiten Sie die Profildatei im $HOME-Verzeichnis und fügen Sie diese Zeile hinzu:
EDITOR=vi; export EDITOR
Dann speichern und beenden. Erwägen Sie die Erstellung einer Datei mit dem Namen
# (geben Sie hier Ihre eigenen Initialen ein) geben Sie das Datum alle
# 15 Minuten zwischen 18:00 und 6:00 Uhr an die Konsole zurück
0,15,30,45 18-06 * * * /bin/echo 'date' > /dev/console
Speichern und beenden. Stellen Sie sicher, dass die ersten 5 Felder durch Leerzeichen getrennt sind.
Im obigen Beispiel gibt das System alle 15 Minuten die aktuelle Uhrzeit an die Konsole aus. Wenn das System abstürzt oder hängen bleibt, können Sie anhand der zuletzt angezeigten Zeit auf einen Blick erkennen, wann das System nicht mehr funktioniert. In einigen Systemen wird tty1 zur Darstellung der Konsole verwendet, und das obige Beispiel kann je nach tatsächlicher Situation entsprechend geändert werden. Um die soeben erstellte Crontab-Datei zu übermitteln, können Sie diese neu erstellte Datei als Argument an den Cron-Befehl übergeben:
$ crontab davecron
Nachdem die Datei nun an den übermittelt wurde Cron-Prozess wird alle 15 Minuten ausgeführt.
Gleichzeitig wurde eine Kopie der neu erstellten Datei im Verzeichnis /var/spool/cron abgelegt, und der Dateiname ist der Benutzername (z. B. dave).
2). ,18-06 * * * /bin/echo `date` >dev/tty1
Sie werden ähnliche Inhalte wie oben sehen. Mit dieser Methode können Sie eine Sicherungskopie der Crontab-Datei im Verzeichnis $H O M E erstellen:
$ crontab -l > $HOME/mycron
Sollten Sie die Datei versehentlich löschen crontab-Datei können Sie mit der im vorherigen Abschnitt beschriebenen Methode schnell wiederherstellen.
3) Crontab-Datei bearbeiten
Wenn Sie Einträge in der Crontab-Datei hinzufügen, löschen oder bearbeiten möchten und die Umgebungsvariable E D I TO R auf vi gesetzt ist, können Sie vi verwenden Bearbeiten Sie die Crontab-Datei. Der entsprechende Befehl lautet:
$ crontab -e
Sie können die Crontab-Datei ändern und beenden, genau wie Sie mit vi jede andere Datei bearbeiten. Wenn einige Einträge geändert oder neue Einträge hinzugefügt werden, führt Cron beim Speichern die erforderlichen Integritätsprüfungen für die Datei durch. Wenn in einem der Felder ein Wert außerhalb des zulässigen Bereichs liegt, werden Sie dazu aufgefordert.
Wenn wir die Crontab-Datei bearbeiten, fügen wir möglicherweise neue Einträge hinzu. Fügen Sie beispielsweise Folgendes hinzu:
# DT: Kerndateien löschen, um 3:30 Uhr an 1,7,14,21,26,26 Tagen jedes Monats
30 3 1,7 ,14,21,26 * * /bin/find -name „core' -exec rm {} ;
Jetzt speichern und beenden. Am besten fügen Sie über jedem Eintrag in der Crontab-Datei einen Kommentar hinzu, z this Sie können seine Funktion, Laufzeit und, was noch wichtiger ist, wissen, um welchen Job es sich handelt
Nun verwenden wir den zuvor erwähnten Befehl crontab -l, um alle seine Informationen aufzulisten:
$ crontab -l
# (crontab installiert am Dienstag, 4. Mai, 13:07:43 1999)
# DT: Sende das Datum alle 30 Minuten an die Konsole
0, 15,30,45 18-06 * * * /bin/echo `date` > /dev/tty1
# DT:Kerndateien löschen, um 3.30 Uhr am 1, 7,14,21,26 ,26 Tage jedes Monats
30 3 1,7,14,21,26 * * /bin/find -name „core' -exec rm {} ;
4). Crontab-Datei
Um die Crontab-Datei zu löschen, können Sie Folgendes verwenden:
$ crontab -r
5). Verlorene Crontab-Datei wiederherstellen
Wenn Sie die Crontab-Datei versehentlich löschen, können Sie diese nach /var/spool/cron/
$ crontab
wobei
Ich empfehle Ihnen, eine Kopie dieser Datei in Ihrem $H O M E-Verzeichnis zu speichern. Ich hatte eine ähnliche Erfahrung und habe versehentlich mehrmals die Crontab-Datei gelöscht (weil die r-Taste direkt rechts von der e-Taste liegt). Aus diesem Grund wird in einigen Systemdokumentationen empfohlen, die Crontab-Datei nicht direkt zu bearbeiten, sondern eine Kopie der Datei zu bearbeiten und dann die neue Datei erneut einzureichen.
Einige Crontab-Varianten sind etwas seltsam, seien Sie also vorsichtig, wenn Sie den Crontab-Befehl verwenden. Wenn Optionen weggelassen werden, öffnet crontab möglicherweise eine leere Datei oder scheint eine leere Datei zu sein. Drücken Sie zu diesem Zeitpunkt zum Beenden die Entf-Taste. Drücken Sie nicht
5. Anwendungsbeispiel
Instanz 1: Befehl ausführen
Befehl alle 1 Minute:
* * * * * Befehl
Instanz 2: Der 3. und 3. jede Stunde Führen Sie den aus
-Befehl in 15 Minuten:
3,15 * * * * Befehl
Beispiel 3: Führen Sie den
-Befehl in der 3. und 15. Minute von 8 bis 11 Uhr aus:
3,15 8-11 * * * Befehl
Beispiel 4: Führen Sie den
-Befehl alle zwei Tage in der 3. und 15. Minute von 8 bis 11 Uhr aus:
3,15 8-11 */2 * * Befehl
Beispiel 5: Führen Sie den
-Befehl jeden Montag in der 3. und 15. Minute von 8 bis 11 Uhr aus:
3, 15 8-11 * * 1 Befehl
Instanz 6: Starten Sie smb jeden Abend um 21:30 Uhr neu
Befehl:
30 21 * * * /etc/ init.d/smb restart
Instanz 7: Starten Sie smb um 4:45 Uhr am 1., 10. und 22. jedes Monats neu
Befehl:
45 4 1,10,22 * * / etc/init .d/smb restart
Instanz 8: Starten Sie smb jeden Samstag und Sonntag um 1:10 Uhr neu
Befehl:
10 1 * * 6,0 /etc/ init.d/smb restart
Instanz 9: Starten Sie smb täglich alle 30 Minuten zwischen 18:00 und 23:00 Uhr neu
Befehl:
0,30 18-23 * * * /etc/init. d/smb restart
Instanz 10: Starten Sie smb jeden Samstag um 23:00 Uhr neu
Befehl:
0 23 * * 6 /etc/init. d/smb restart
Instanz 11: SMB jede Stunde neu starten
Befehl:
* */1 * * * /etc/init.d/smb restart
Instanz 12: Neu starten smb jede Stunde zwischen 23:00 und 7:00 Uhr
Befehl:
* 23-7/1 * * * /etc/init.d/smb restart
Instanz 13: Starten Sie smb am 4. neu eines jeden Monats und jeden Montag bis Mittwoch um 11 Uhr
Befehl:
0 11 4 * mon-wed /etc/init.d/smb restart
Instanz 14: Neustart smb um 4 Uhr am 1. Januar
Befehl:
0 4 1 jan * /etc/init.d/smb restart
Beispiel 15: Führen Sie das Skript in /etc aus /cron.hourly Verzeichnis jede Stunde
Befehl:
01 * * * * * root run-parts /etc/cron.hourly
Anweisungen:
run -parts Parameter. Sie können später anstelle des Verzeichnisnamens den Namen eines auszuführenden Skripts schreiben
4. Vorsichtsmaßnahmen für die Verwendung
Hinweis: Problem mit Umgebungsvariablen
Manchmal erstellen wir eine Crontab, Die Aufgabe kann jedoch nicht automatisch ausgeführt werden, es gibt jedoch kein Problem, wenn die Aufgabe manuell ausgeführt wird. Diese Situation wird im Allgemeinen dadurch verursacht, dass die Umgebungsvariable nicht in der Crontab-Datei konfiguriert ist.
Beim Definieren mehrerer Planungsaufgaben in einer Crontab-Datei ist das Festlegen von Umgebungsvariablen ein Punkt, der besondere Aufmerksamkeit erfordert, denn wenn wir eine Aufgabe manuell ausführen, wird sie natürlich in der aktuellen Shell-Umgebung ausgeführt Das Programm kann die Umgebungsvariablen finden, wenn es die Aufgabenplanung automatisch durchführt. Daher müssen Sie alle Umgebungsvariablen angeben, die für die Ausführung der Aufgabe in der Crontab-Datei erforderlich sind Problem, wenn das System die Aufgabenplanung durchführt.
Gehen Sie nicht davon aus, dass Cron die erforderliche spezielle Umgebung kennt, das ist nicht der Fall. Daher müssen Sie sicherstellen, dass im Shelll-Skript alle erforderlichen Pfade und Umgebungsvariablen angegeben werden, mit Ausnahme einiger automatisch gesetzter globaler Variablen. Achten Sie daher auf die folgenden drei Punkte:
1) Schreiben Sie den globalen Pfad, wenn der Dateipfad im Skript enthalten ist.
2) Wenn die Skriptausführung Java oder andere Umgebungsvariablen erfordert, Führen Sie die Umgebungsvariablen über den Quellbefehl ein, wie zum Beispiel:
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/ conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
3) Wenn das Skript manuell ausgeführt wird, ist es in Ordnung, aber wenn crontab nicht ausgeführt wird. Zu diesem Zeitpunkt müssen Sie mutig vermuten, dass Umgebungsvariablen schuld sind, und Sie können versuchen, Umgebungsvariablen direkt in crontab einzuführen, um das Problem zu lösen. Zum Beispiel:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh
Achten Sie darauf, das System zu löschen E-Mail-Protokoll des Benutzers
Nachdem die Ausführung jeder Aufgabe geplant ist, sendet das System die Ausgabeinformationen der Aufgabe per E-Mail an den aktuellen Systembenutzer. Mit der Zeit werden die Protokollinformationen sehr umfangreich und können den normalen Betrieb des Systems beeinträchtigen Daher ist es für jede Aufgabe sehr wichtig, mit Weiterleitungen umzugehen.
Sie können beispielsweise das folgende Formular in der Crontab-Datei festlegen, um die Protokollausgabe zu ignorieren:
0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1
„/dev/null 2>&1“ bedeutet, dass die Standardausgabe zuerst umgeleitet wird /dev/null, und leiten Sie dann die Standardausgabe nach /dev/null um, sodass die Standardausgabe auch nach /dev/null umgeleitet wird, sodass das Problem mit der Protokollausgabe gelöst ist.
Aufgabenplanung auf Systemebene und Aufgabenplanung auf Benutzerebene
Aufgabenplanung auf Systemebene führt hauptsächlich einige Wartungsvorgänge des Systems aus, und die Aufgabenplanung auf Benutzerebene erledigt hauptsächlich einige benutzerdefinierte Aufgaben. Die Aufgabenplanung auf Systemebene kann abgeschlossen werden (dies wird nicht empfohlen). Der umgekehrte Vorgang ist jedoch nicht möglich. Der Aufgabenplanungsvorgang des Root-Benutzers kann über „crontab –uroot –e“ oder „geplant“ festgelegt werden Die Aufgabe kann direkt in die Datei /etc/crontab geschrieben werden. Beachten Sie jedoch, dass Sie die Aufgabe in die Datei /etc/crontab einfügen müssen, wenn Sie eine Aufgabe zum regelmäßigen Neustarten des Systems definieren möchten Starten Sie das System regelmäßig unter dem Root-Benutzer neu, es ist ungültig.
Andere Hinweise
Der neu erstellte Cron-Job wird nicht sofort ausgeführt, die Ausführung dauert mindestens 2 Minuten. Wenn Cron neu gestartet wird, wird es sofort ausgeführt.
Wenn Crontab plötzlich ausfällt, können Sie versuchen, /etc/init.d/crond neu zu starten, um das Problem zu lösen. Oder überprüfen Sie das Protokoll, um zu sehen, ob ein Job ausgeführt wurde/einen Fehler gemeldet wurde tail -f /var/log/cron.
Führen Sie crontab -r niemals zufällig aus. Es löscht die Crontab-Dateien des Benutzers aus dem Crontab-Verzeichnis (/var/spool/cron). Alle Crontabs dieses Benutzers sind nach dem Löschen verschwunden.
% hat in crontab eine besondere Bedeutung, was Zeilenumbruch bedeutet. Wenn Sie es verwenden möchten, müssen Sie % maskieren. Beispielsweise wird das häufig verwendete Datum „+%Y%m%d“ nicht in crontab ausgeführt und sollte durch das Datum „+%Y%m%d“ ersetzt werden.
Das obige ist der detaillierte Inhalt vonWas ist der Crontab-Befehl für die geplante Aufgabe der Linux-Benutzersteuerung und seine ausführliche Erklärung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!