Was ist Cron?
Cron ist der Name des Programms, mit dem Linux / Unix-Benutzer zu einer bestimmten Zeit oder einem bestimmten Datum automatisch Befehle oder Skripte (Befehlsgruppen) ausführen können. Es wird normalerweise für Verwaltungsaufgabenbefehle wie z. B. Sicherungen verwendet, kann jedoch für die Ausführung beliebiger Aktionen verwendet werden. Wie in den Cron-Handbuchseiten definiert; Es ist ein Daemon, der geplante Programme ausführt.
In praktisch allen Linux-Distributionen wird die Vixie-Cron-Version von der Person verwendet, die sie entwickelt hat. Dies ist Paul Vixie, einer der großen Gurus von Unix, der unter anderem auch den DNS-Server BIND erstellt hat am beliebtesten in der Welt.
Cron starten
Cron ist ein Daemon (Dienst), was bedeutet, dass er nur einmal gestartet werden muss, normalerweise mit demselben Systemstart. Der cron-Dienst heißt crond. In den meisten Distributionen wird der Dienst automatisch installiert und wird vom Start des Systems aus gestartet. Es gibt verschiedene Möglichkeiten, dies zu überprüfen:
1) Status etc / rc.d / init.d / crond 2) /etc/init.d/crond Status crond (pid 507) läuft ...
Falls Sie den Dienstbefehl installiert haben:
Servicestatus
crond (pid 507) läuft ...
Sie können auch den Befehl ps ausführen:
ps -ef | grep crond
Wenn cron aus irgendeinem Grund nicht funktioniert, können wir damit beginnen:
/etc/rc.d/init.d/crond start Startpunkt: [OK]
[/color] [color = rgb (0,0,0)] Wenn der Dienst nicht für einen Neustart von Anfang an konfiguriert wurde, reicht es aus, ihn mit dem Befehl chkconfig hinzuzufügen: [/ color]
chkconfig --level 35 crond on
Damit würden Sie es den Ausführungsebenen 3 und 5 hinzufügen, so dass es zum Zeitpunkt des Systemstarts startet.
Cron benutzen
Es gibt mindestens zwei verschiedene Möglichkeiten, cron zu verwenden:
Das erste befindet sich im Verzeichnis / etc, in dem Sie höchstwahrscheinlich die folgenden Verzeichnisse finden:
- cron.hourly
- cron.daily
- cron.weekly
- cron.monatlich
Wenn eine Skriptdatei in einem dieser Verzeichnisse abgelegt ist, wird das Skript je nach Verzeichnis jede Stunde, jeden Tag, jede Woche oder jeden Monat ausgeführt.
Damit das Skript ausgeführt werden kann, muss es ungefähr so aussehen:
#! / bin / sh #script, das eine Sicherung generiert cd / usr / documents tar czf * backup cp backup / other_directory /
Wir müssen korrigieren, dass die erste Zeile mit #! Beginnt, was darauf hinweist, dass es sich um ein Bash-Shell-Skript handelt. Die anderen Zeilen sind die Befehle, die das Skript ausführen soll. Dieses Skript könnte zum Beispiel backup.sh heißen und wir müssen auch die entsprechenden Berechtigungen ändern, damit es ausgeführt werden kann, zum Beispiel:
chmod 700 backup.sh ls -l backup.sh -rwx ------ 1 root root 0 20. Juli 09:30 backup.sh
Das “x” in der Berechtigungsgruppe des Besitzers (-rwx) gibt an, dass es ausgeführt werden kann.
Wenn dieses Skript in cron.hourly verbleibt, wird es stündlich mit einer Minute pro Tag ausgeführt. Später erkläre ich, warum.
Die zweite Möglichkeit, cron auszuführen oder zu verwenden, besteht darin, die Datei / etc / crontab direkt zu bearbeiten. In der Standardinstallation mehrerer Linux-Distributionen sieht diese Datei folgendermaßen aus:
Katze / etc / crontab SHELL = / bin / bash PATH = / sbin: / bin: / usr / sbin: / usr / bin MAILTO = root HOME = / # Laufteile 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * 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 sind Variablen, die Folgendes angeben:
Kommentare werden am Zeilenanfang mit # gekennzeichnet .
Nach dem oben Gesagten gibt es die Zeilen, die die richtig programmierten Aufgaben ausführen. Es gibt keine Begrenzung für die Anzahl der Aufgaben, eine pro Zeile. Die Felder (7) , die diese Zeilen bilden, werden wie folgt gebildet:
Minute Stunde DiaDelMes Monat Wochentag Benutzerbefehl
- Feld: Beschreibung
- Minute: Steuert die Minute der Ausführung des Befehls. Dieser Wert muss zwischen 0 und 59 liegen.
- Zeit: Steuert die Zeit, zu der der Befehl ausgeführt wird. Er wird im 24-Stunden-Format angegeben. Die Werte müssen zwischen 0 und 23 liegen. 0 ist Mitternacht.
- Tag des Monats: Tag des Monats, an dem Sie den Befehl ausführen möchten. Beispielsweise würde 20 angegeben, um den Befehl am 20. des Monats auszuführen.
- Monat: Monat, in dem der Befehl ausgeführt wird, kann numerisch (1-12) oder durch den Namen des Monats in Englisch nur die ersten drei Buchstaben angegeben werden.
- Wochentag: Tag in der Woche, an dem der Befehl ausgeführt wird. Er kann numerisch (0-7) sein oder mit dem Namen des Tages in Englisch, nur die ersten drei Buchstaben. (0 und 7 = Sonntag)
- Benutzer: Benutzer, der den Befehl ausführt.
- Befehl: Befehl, Skript oder Programm, das Sie ausführen möchten. Dieses Feld kann mehrere Wörter und Leerzeichen enthalten.
Ein Sternchen * als Wert in den ersten fünf Feldern gibt den Anfang und das Ende des Feldes an, dh alles. Ein * im Minutenfeld zeigt alle Minuten an.
Um dies anhand der ersten 5 Felder und des Sterns besser zu verstehen, werde ich einige Beispiele besser verwenden:
Beispiel:
Beschreibung 01 * * * * Es läuft zu jeder vollen Stunde jeden Tages in der ersten Minute 158 * * * Jeden Tag um 8:15 Uhr 15 20 * * * Jeden Tag um 20.15 Uhr 00 5 * * 0 Jeden Sonntag um 5 Uhr * 5 * * Sonne Jede Minute ab 5:00 Uhr um 5:59 Uhr jeden sonntag 45 19 1 * * Am ersten eines jeden Monats um 19:45 Uhr 01 * 20 7 * In Minute 1 jeder Stunde des 20. Juli 10 1 * 12 1 Jeden Montag im Dezember um 1:10 Uhr 00 12 16 * Wen Am 16. eines jeden Monats mittags und das ist Mittwoch 30 9 20 7 4 Am 20. Juli um 9:30 Uhr und das ist Donnerstag 30 9 20 7 * Am 20. Juli um 9:30 Uhr, unabhängig vom Wochentag 20 * * * 6 Samstags jeweils zur 20. Minute 20 * * 1 6 Zur 20. Minute jeder vollen Stunde am Samstag im Januar
In den Feldern können auch Listen angegeben werden. Die Listen können in der Form von 1,2,3,4 oder in der Form von 1-4 vorliegen, die gleich wären. Cron unterstützt ebenfalls Inkremente in den Listen, die wie folgt angegeben sind:
Wert oder Liste / Erhöhung
Auch hier ist es einfacher, die Listen und Inkremente anhand von Beispielen zu verstehen:
Beispiel:
Beschreibung 59 11 * 1-3 1,2,3,4,5 Montag bis Freitag von Januar bis März um 11:59 Uhr 45 * 10-25 * 6-7 Zur Minute 45 aller Stunden von den Tagen 10 bis 25 aller Monate und an diesem Tag ist Samstag oder Sonntag 10,30,50 * * * 1,3,5 Montags, mittwochs und freitags um 10, 30 und 50 Minuten aller Stunden * / 15 10-14 * * * Alle fünfzehn Minuten ab 10:00 Uhr um 14:00 Uhr * 12 1-10 / 2 2,8 * Alle Minuten der 12 des Tages, an den Tagen 1,3,5,7 und 9 von Februar und August. (Die Erhöhung im dritten Feld ist 2 und beginnt bei 1) 0 * / 5 1-10,15,20-23 * 3 Alle 5 Stunden von Tag 1 bis 10, Tag 15 und Tag 20 bis 23 eines jeden Monats und an diesem Tag ist Mittwoch 3/3 2/4 2 2 2 Alle 3 Minuten ab Minute 3 (3,6,9 usw.) der Stunden 2,6,10 usw. (alle 4 Stunden ab Stunde 2) am 2. Februar und das ist Dienstag
Wie im letzten Beispiel zu sehen ist, wird die Cron-Task, die dieser Zeile mit diesen Daten zugewiesen wurde, nur ausgeführt, wenn die 5 Felder (UND) erfüllt sind. Das heißt, damit die Aufgabe ausgeführt werden kann, muss es sich um einen Dienstag, den 2. Februar, um 02:03 Uhr handeln. Es ist immer ein Boolesches UND, das nur dann wahr wird, wenn die 5 Felder in der bestimmten Minute wahr sind.
[/color] [color = rgb (0,0,0)] Der vorherige Fall macht deutlich, dass:
Das cron-Programm wird jede Minute aufgerufen und führt die Aufgaben aus, die seine Felder in genau dieser Minute erfüllen.
Einschließlich des Benutzerfelds und des Befehls könnten die Crontab-Zeilen dann wie folgt belassen werden:
0 22 * * * root /usr/drainer.sh 0 23 * * 5 root /usr/respaldosemanal.sh 0 8,20 * * * jcarrillo mail -s "System funktioniert" [email protected]
Die ersten beiden Zeilen werden vom Root-Benutzer ausgeführt, und die erste Zeile führt jeden Abend um 10 Uhr das Skript aus, das eine tägliche Sicherung generiert. Die zweite führt jeden Freitag um 11 Uhr ein Skript aus, das eine wöchentliche Unterstützung generiert. Die dritte Zeile wird vom sergio-Benutzer ausgeführt und wird jeden Tag um 8 Uhr morgens und um 8 Uhr abends ausgeführt. Der Befehl lautet, eine E-Mail mit dem Betreff “system running” an das Konto [email protected] zu senden So wie ein Administrator weiß, dass ein Remote-System zu den angegebenen Zeiten aktiv ist, aber zu diesen Zeiten eine E-Mail erhält, stimmt etwas nicht.
Als root ist es dann möglich, crontab direkt zu modifizieren :
vim / etc / crontab
Dies wird direkt geändert.
Ausführen von Cron mit mehreren Benutzern, Befehl crontab
Linux ist ein Mehrbenutzersystem und cron sind die Anwendungen, die die Arbeit mit mehreren Benutzern gleichzeitig unterstützen. Jeder Benutzer kann eine eigene crontab-Datei haben. Tatsächlich wird angenommen, dass die Datei / etc / crontab die crontab-Datei des Root-Benutzers ist, obwohl es kein Problem gibt, dass andere Benutzer eingeschlossen sind, und daher das sechste Feld, das genau angibt, wer der Benutzer ist Wer führt die Aufgabe aus und wird benötigt in:
/ etc / crontab
Wenn normale (und sogar Root-) Benutzer ihre eigene crontab-Datei generieren möchten, verwenden wir den Befehl crontab .
Im Verzeichnis / var / spool / cron (kann je nach Distribution variieren) wird für jeden Benutzer eine Cron-Datei erstellt. Diese Datei sollte, auch wenn es sich um Text handelt, nicht direkt bearbeitet werden.
Wir haben dann zwei Situationen, die crontab-Datei mit dem Befehl direkt zu generieren:
crontab -e
Dadurch wird der Standardeditor (normalerweise vi) mit der Datei “empty crontab” geöffnet, in der der Benutzer seine Aufgabentabelle eingibt und die automatisch als / var / spool / cron / user gespeichert wird.
Der andere Fall ist, dass der Benutzer eine normale Textdatei mit den Einträgen der Tasks bearbeitet und sie als Beispiel ‘my_cron’ nennt. Dann wird sie mit dem Befehl $> crontab my_cron als Ihre Cron-Datei des Benutzers in / var / spool festgelegt / cron / user:
Ich habe my_cron gesehen # Dateien mit freigegebenen Ordnern löschen 0 20 * * * rm -f / home / sergio / shared / * # führt ein Skript aus, das den Dokumentenordner am ersten Tag eines jeden Monats sichert 0 22 1 * * /home/sergio/respaldomensual.sh # Alle 5 Stunden von Montag bis Freitag wird sichergestellt, dass die Berechtigungen bei mir zu Hause korrekt sind 1 * 5 * * * 1-5 chmod -R 640 / home / sergio / * : wq (die Datei wird gespeichert) > ls my_cron > crontab my_cron (steht auf / var / spool / cron / user)
Fassen Sie das Obige zusammen und ziehen Sie andere crontab- Optionen in Betracht:
crontab archivo.cron (setzt die Datei.cron als crontab des Benutzers) crontab -e (öffnet den voreingestellten Editor, in dem Sie die crontab-Datei erstellen oder bearbeiten können) crontab -l (listet die aktuellen crontab, cron Aufgaben des Benutzers auf) crontab -r (entfernt die aktuelle crontab des Benutzers)
In einigen Distributionen ist es beim Bearbeiten von Crontabs normaler Benutzer erforderlich, den Dienst neu zu starten, damit die Crontab-Dateien in / var / spool / cron erneut gelesen werden können.
Neustart des Dienstes
In diesem Artikel finden Sie weitere Informationen zum Starten / Beenden / Neustarten von Diensten.
Zugriff auf cron kontrollieren
Mit Cron können Sie steuern, welche Benutzer Cron-Dienste verwenden können oder nicht. Dies wird auf sehr einfache Weise durch die folgenden Dateien erreicht:
- /etc/cron.allow
- /etc/cron.deny
Um zu verhindern, dass ein Benutzer cron oder besser gesagt den Befehl crontab verwendet, fügen Sie einfach Ihren Benutzernamen zur Datei /etc/cron.deny hinzu, damit er verwendet werden kann. Fügen Sie dann gegebenenfalls Ihren Benutzernamen in /etc/cron.allow hinzu aus irgendeinem grund möchten sie allen benutzern die verwendung von cron verweigern, dann können sie das wort ALL am anfang von cron.deny schreiben und das würde genügen.
Echo ALL >> / etc / cron.deny oder um einen Benutzer mehr zu cron.allow hinzuzufügen Echo John >> / etc / cron.allow
Wenn die cron.allow-Datei oder die cron.deny-Datei nicht vorhanden ist, ist die Verwendung von cron theoretisch ohne Benutzereinschränkungen möglich. Wenn Sie Benutzernamen in cron.allow hinzufügen, ohne eine cron.deny-Datei zu erstellen, hat dies den gleichen Effekt wie beim Erstellen mit dem Wort ALL. Sobald cron.allow mit einem einzelnen Benutzer erstellt wurde, müssen Sie in dieser Datei immer die anderen Benutzer angeben, die Sie für cron verwenden möchten.