Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Detaillierte Erläuterung des Crontab-Befehls für geplante Linux-Aufgaben

Detaillierte Erläuterung des Crontab-Befehls für geplante Linux-Aufgaben

小云云
小云云Original
2018-03-21 11:27:302760Durchsuche

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, der unter Linux verwendet wird, um regelmäßig bestimmte Aufgaben auszuführen oder auf die Verarbeitung bestimmter Ereignisse zu warten, ähnlich wie bei geplanten Aufgaben unter Windows Wenn das Betriebssystem installiert ist, wird dieses Servicetool standardmäßig installiert und der Crond-Prozess wird regelmäßig jede Minute prüfen, ob Aufgaben ausgeführt werden müssen automatisch ausgeführt werden.

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 der Crond-Task zu konfigurieren. Die SHELL-Variable in der ersten Zeile gibt an, welche Shell Hier ist die Bash-Variable in der zweiten Zeile, die den Pfad für die Ausführung des Befehls durch das System angibt. Die MAILTO-Variable in der dritten Zeile gibt an, dass die Crond-Task-Ausführungsinformationen per E-Mail gesendet werden . Wenn der Wert der MAILTO-Variable leer ist, bedeutet dies, dass dem Benutzer keine Informationen zur Aufgabenausführung gesendet werden. Die HOME-Variable in der vierten Zeile gibt das Home-Verzeichnis an, das beim Ausführen des Befehls oder Skripts 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

Dabei gilt:

Minute: stellt die Minute dar, die eine beliebige ganze Zahl zwischen 0 und 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, z. B. Monat Feld wenn Wenn es ein Sternchen ist, bedeutet dies, 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 Intervallen 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 kein Benutzer 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. Häufig verwendete 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 Sie dasselbe tun, bearbeiten Sie die Profildatei im $HOME-Verzeichnis und fügen Sie diese Zeile hinzu:

EDITOR=vi

Dann speichern und beenden. Erwägen Sie die Erstellung einer Datei mit dem Namen , wobei der Benutzername ist, zum Beispiel davecron. Fügen Sie dieser Datei den folgenden Inhalt hinzu.

# (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 eine 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/ kopieren, sofern Sie noch ein Backup in Ihrem $H O M E-Verzeichnis haben, wobei Wenn der Kopiervorgang aufgrund von Berechtigungsproblemen nicht abgeschlossen werden kann, können Sie Folgendes verwenden:

$ crontab

wobei der Name der Datei ist, die Sie im $ kopiert haben H O M E-Verzeichnis.

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 , da sonst die Crontab-Datei verloren geht.

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 kann später den Namen eines auszuführenden Skripts anstelle des Verzeichnisnamens schreiben


4. Vorsichtsmaßnahmen für die Verwendung

Hinweis Umgebungsvariablenproblem
Manchmal erstellen wir eine Crontab, aber Die Aufgabe kann 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 also auf die folgenden 3 Punkte:

1) Wenn der Dateipfad im Skript enthalten ist, schreiben Sie den globalen Pfad

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 des 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 Datum „+%Y%m%d“ ersetzt werden.

Verwandte Empfehlungen:

Detaillierte Erklärung der Crontab für geplante Aufgaben in Linux

Detaillierte Erklärung der Crontab für geplante Aufgaben in PHP

Detaillierte Einführung in den Crontab-Befehl

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Crontab-Befehls für geplante Linux-Aufgaben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn