Cron: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(8 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
<span id="chronos-tabula"></span>
 
 
= Chronos Tabula =
 
= Chronos Tabula =
  
Zeile 5: Zeile 4:
 
* Der Entwickler hat sich jedoch verschrieben
 
* Der Entwickler hat sich jedoch verschrieben
  
<!----->
 
 
[[Bild:cron-namensherkunft.png]]
 
[[Bild:cron-namensherkunft.png]]
  
Zeile 14: Zeile 12:
 
* Es wird minütlich nach auszuführenden Jobs und Änderungen im crontab geprüft
 
* Es wird minütlich nach auszuführenden Jobs und Änderungen im crontab geprüft
  
<!----->
 
<span id="crontabs"></span>
 
 
= Crontabs =
 
= Crontabs =
  
 
* Um Syntaxfehler zu vermeiden, werden die Tabellen nicht nur mit dem Texteditor bearbeitet, sondern über den Befehl: '''crontab'''
 
* Um Syntaxfehler zu vermeiden, werden die Tabellen nicht nur mit dem Texteditor bearbeitet, sondern über den Befehl: '''crontab'''
  
<!----->
 
<span id="user-crontab"></span>
 
 
== User-Crontab ==
 
== User-Crontab ==
  
Zeile 27: Zeile 21:
 
* Die Jobs, die darin aufgeführt sind, werden von Cron unter der jeweiligen Benutzerkennung ausgeführt
 
* Die Jobs, die darin aufgeführt sind, werden von Cron unter der jeweiligen Benutzerkennung ausgeführt
  
<!----->
 
<span id="systemweiter-crontab"></span>
 
 
== Systemweiter Crontab ==
 
== Systemweiter Crontab ==
  
Zeile 34: Zeile 26:
 
* Das Format unterscheidet sich etwas von den Benutzercrontabs
 
* Das Format unterscheidet sich etwas von den Benutzercrontabs
  
<!----->
 
<span id="etccron.d"></span>
 
 
== /etc/cron.d/ ==
 
== /etc/cron.d/ ==
  
Zeile 42: Zeile 32:
 
* Alternativ auch in ''cron.daily'', ''cron.hourly'', ''cron.monthly'' oder ''cron.weekly''
 
* Alternativ auch in ''cron.daily'', ''cron.hourly'', ''cron.monthly'' oder ''cron.weekly''
  
<!----->
 
<span id="aufbau-einer-crontab-datei"></span>
 
 
= Aufbau einer Crontab-Datei =
 
= Aufbau einer Crontab-Datei =
  
<span id="verwaltung-von-crontab"></span>
+
* * * * * auszuführender Befehl
 +
┬ ┬ ┬ ┬ ┬
 +
│ │ │ │ │
 +
│ │ │ │ └──── Wochentag (0-7 oder Sun, Mon, Tue,etc) (Sonntag =0 oder =7)
 +
│ │ │ └────── Monat (1-12 oder Jan, Feb, etc)
 +
│ │ └──────── Tag (1-31)
 +
│ └────────── Stunde (0-23)
 +
└──────────── Minute (0-59)
 +
z.B. wöchtenliches Backup der Heimatverzeichnisse aller Benutzer um 3 Uhr morgens:
 +
 
 +
0 3 * * 1 tar -zcf /var/backups/home.tgz /home/
 +
=Beispiele=
 +
;<nowiki>*</nowiki>/2 - Dieser Eintrag führt die Aufgabe alle 2 Minuten aus.
 +
*/2 * * * * /pfad/zum/skript.sh
 +
;1,3,5,9 - Dieser Eintrag führt die Aufgabe zu bestimmten Minuten aus, nämlich 1, 3, 5 und 9.
 +
1,3,5,9 * * * * /pfad/zum/skript.sh
 +
;5-9 - Dieser Eintrag führt die Aufgabe von Minute 5 bis Minute 9 in jeder Stunde aus.
 +
5-9 * * * * /pfad/zum/skript.sh
 +
 
 
= Verwaltung von Crontab =
 
= Verwaltung von Crontab =
  
<span id="eigene-crontab-anzeigen"></span>
 
 
== Eigene Crontab anzeigen ==
 
== Eigene Crontab anzeigen ==
  
 
* '''crontab -l'''
 
* '''crontab -l'''
  
<!----->
 
<span id="crontab-eines-anderen-benutzers-anzeigen"></span>
 
 
== Crontab eines anderen Benutzers anzeigen ==
 
== Crontab eines anderen Benutzers anzeigen ==
  
 
* '''crontab -lu ''Benutzer'''''
 
* '''crontab -lu ''Benutzer'''''
  
<!----->
 
<span id="crontab-bearbeiten"></span>
 
 
== Crontab bearbeiten ==
 
== Crontab bearbeiten ==
  
 
* '''crontab -e'''
 
* '''crontab -e'''
  
<!----->
 
<span id="crontab-löschen"></span>
 
 
== Crontab löschen ==
 
== Crontab löschen ==
  
 
* '''crontab -r'''
 
* '''crontab -r'''
  
<!----->
 
<span id="crontab-aus-einer-datei-lesen"></span>
 
 
== Crontab aus einer Datei lesen ==
 
== Crontab aus einer Datei lesen ==
  
* '''crontab ''Datei'''''
+
* '''crontab ''/Pfad/zur/Datei'''''
  
<!----->
+
= Cron vs. Daemon (Hintergrundprozess) =
<span id="cron-vs.-daemon"></span>
 
= Cron vs. Daemon =
 
  
 
* Ein Daemon läuft immer, d.h.:
 
* Ein Daemon läuft immer, d.h.:
Zeile 91: Zeile 86:
 
* Bei performance-lastigen Aufgaben eher ein Daemon.
 
* Bei performance-lastigen Aufgaben eher ein Daemon.
  
<!----->
 
 
;Man muss aber je nach Situation selbst entscheiden, was mehr Sinn macht.
 
;Man muss aber je nach Situation selbst entscheiden, was mehr Sinn macht.
  
<span id="alternative-systemd"></span>
 
 
= Alternative Systemd =
 
= Alternative Systemd =
  
* Systemd-Service Dateien haben auch eine Timer-Funktion, wenn man sie einstellen will.
+
* Systemd-Service Dateien haben auch eine [[Systemd Service timers|Timer]]-Funktion, wenn man sie einstellen will.
* Kann manchmal präziser sein, da Systemd die Zeit ab dem Boot zählt. <!---
+
* Kann manchmal präziser sein, da Systemd die Zeit ab dem Boot zählt.
===cron.d Verzeichnis===
 
 
 
Im Verzeichnis /etc kann ein Verzeichnis cron.d existieren, das Dateien im selben Format wie /etc/crontab enthalten darf. Auch diese Dateien werden von cron überwacht und darin enthaltene Befehle werden ausgeführt.
 
'''cron.{hourly,daily,weekly,monthly} Verzeichnisse'''
 
Ebenfalls im /etc/verzeichnis können Verzeichnisse der Namen cron.hourly, cron.daily, cron.weekly und cron.monthly existieren. Diese Verzeichnisse enthalten nicht crontabs, sondern Shellscripts, die entsprechend stündlich, täglich, wöchentlich oder monatlich ausgeführt werden.
 
 
 
===Aufbau einer Crontab Datei===
 
 
 
Die auszuführenden Befehle werden in einer benutzereigenen Tabelle gespeichert, der sogenannten ''crontab''. Jeder Benutzer kann eine crontab erstellen.
 
Crontab-Einträge sind entweder Definitionen von Shellvariablen oder zeitgesteuerte Cron-Befehle. Leere Zeilen oder Zeilen, die mit einem # beginnen werden ignoriert.
 
 
 
Normalerweise schickt cron alle Ausgaben von ausgeführten Kommandos per Mail an den User, der das Cron-Kommando ausführen liess. Die Variable MAILTO kann diese Eigenschaft verändern. Wenn sie den Namen eines Users enthält, so werden ihm und nicht dem ursprünglichen Cron-User die Mail geschickt. Ist die Variable MAILTO definiert, aber leer, so wird gar keine Mail verschickt.
 
 
 
Diese zeitgesteuerten Cron-Befehle bestehen aus sechs Spalten; die ersten fünf dienen der Zeitangabe (Minute, Stunde, Tag, Monat, Wochentag), alle weiteren Zeichen bis zum Zeilenumbruch werden als der auszuführende Befehl aufgefasst. Die einzelnen Spalten werden durch Leerzeichen oder Tabulatoren getrennt.
 
 
Beispiel einer ''Crontab'':
 
SHELL=/bin/bash
 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
MAILTO=""
 
 
#M    S  T M W    Befehl
 
5    *  * * *    /usr/bin/message.sh
 
*/5  *  * * *    /usr/bin/message.sh
 
59    23  * * 0    cp /var/log/messages /log/backup/messages
 
0    0  * * *    cp /var/log/syslog /log/backup/syslog
 
20,30 1  * * 1-5  /usr/bin/work.sh
 
 
 
Der erste Befehl (beginnend mit <tt>5…</tt>) wird fünf Minuten nach jeder vollen Stunde, der zweite alle 5 Minuten (die Schrittweite wird durch <tt>*/Schrittweite</tt> angegeben), der dritte einmal pro Woche sonntags um 23:59 Uhr, der vierte täglich um 00:00 Uhr und der fünfte montags bis freitags jeweils um 01:20 und 01:30 ausgeführt.
 
 
 
Die Struktur der Befehlszeile ist wie folgt zu verstehen:
 
 
 
* * * * * auszuführender Befehl
 
┬ ┬ ┬ ┬ ┬
 
│ │ │ │ │
 
│ │ │ │ └──── Wochentag (0-7 oder Sun, Mon, Tue,etc) (Sonntag =0 oder =7)
 
│ │ │ └────── Monat (1-12 oder Jan, Feb, etc)
 
│ │ └──────── Tag (1-31)
 
│ └────────── Stunde (0-23)
 
└──────────── Minute (0-59)
 
 
 
 
 
Ein Feld für eine Zeitangab kann dabei mehrere Angaben enthalten:
 
 
 
{|border=1 cellpadding=2
 
|
 
|Syntax
 
|Beispiel
 
|-
 
|Voller Bereich
 
|*
 
|Bei Minute: 0,1,2,3,...,59
 
|-
 
|Ausgweählter Bereich
 
|1-5
 
|entspricht 1,2,3,4,5
 
|-
 
|Liste
 
|1,5,10
 
|nur an den angegebenen Werten
 
|-
 
|Kombination
 
|2,5,30-40
 
|Kombination aus Liste und Bereich
 
|-
 
|Schritte
 
|*/5
 
|bei Minute: alle 5 Minuten
 
|-
 
|Kombination
 
|2-47/5
 
|alle 5 Minten im Bereich 2-47 (2,7,12,...)
 
|}
 
 
 
Werden in einem Feld Namen benutzt, so sind Bereiche und Listen nicht erlaubt.
 
 
 
Statt der ersten 5 Felder zur Zeitangabe können auch folgende speziellen Angaben erfolgen:
 
 
 
{|border=1 cellpadding=2
 
|Angabe
 
|Bedeutung
 
|-
 
|@reboot
 
|Läuft einmal bei einem Reboot
 
|-
 
|@yearly       
 
|Läuft einmal im Jahr (0 0 1 1 *)
 
|-
 
|@annually     
 
|Läuft einmal im Jahr (0 0 1 1 *)
 
|-
 
|@monthly
 
|Läuft einmal im Monat (0 0 1 * *)
 
|-
 
|@weekly
 
|Läuft einmal wöchentlich (0 0 * * 0)
 
|-
 
|@daily
 
|Läuft einmal täglich (0 0 * * *)
 
|-
 
|@midnight
 
|Läuft einmal täglich (0 0 * * *)
 
|-
 
|@hourly
 
|Läuft einmal stündlich (* * * *)
 
|}
 
 
 
==Verwalten von User Crontabs==
 
'''Ansehen der aktuellen Crontab'''
 
root@nazgul:~# crontab -l
 
'''Erstellen / Bearbeiten der Crontab'''
 
root@nazgul:~# crontab -e
 
'''Löschen der Crontab'''
 
root@nazgul:~# crontab -r
 
'''Inhalt von vorhandener Datei als Crontab setzen'''
 
root@nazgul:~# crontab dateiname
 
'''Ansehen der Crontab eines anderen Benutzers (nur root)'''
 
root@nazgul:~# crontab -lu tina
 
 
 
==System Crontab(s)==
 
 
 
Im Unterschied zu User Crontabs gibt es ein zusätzliches Feld das angibt, unter welchem Benutzer der aufzurufende Befehl ausgeführt werden soll.
 
M S            T M WT  User Befehl
 
2 0,5,10,15,20 * * 1-6 root if [ -x /usr/sbin/pg_maintenance ]; then /usr/sbin/pg_maintenance --analyze >/dev/null; fi
 
 
 
 
 
Neben der Datei /etc/crontab und dem Verzeichnis /etc/cron.d existieren in vielen Linux-Distributionen (RedHat, Debian, SuSE,...) auch noch die Verzeichnisse
 
/etc/cron.hourly
 
/etc/cron.daily
 
/etc/cron.weekly
 
/etc/cron.monthly
 
  
Diese Verzeichnisse enthalten keine Crontabs, sondern Programme, die entsprechend stündlich, täglich, wöchentlich oder monatlich einmal ausgeführt werden sollen. In der Regel handelt es sich bei diesen Programmen um Shellscripts, die dann wiederum bestimmte Programme aufrufen.
+
= Aufgaben =
Die Ausführung dieser Programme steuert cron mit Hilfe der Datei '''/etc/crontab''' .
 
  
Im Verzeichnis '''/etc/cron.d''' befinden sich Systemweit gültige Crontabs.
+
* [[Aufgaben cron]]
--->
 

Aktuelle Version vom 25. Oktober 2023, 09:25 Uhr

Chronos Tabula

  • Der Name leitet sich vom griechischen Wort für Zeit ab
  • Der Entwickler hat sich jedoch verschrieben

Cron-namensherkunft.png

  • Der cron-Daemon ist eine Jobsteuerung für wiederkehrende Aufgaben, die automatisch zu einer bestimmten Zeit aufgeführt werden sollen (cronjobs).
  • z.B. Archivieren und Löschen von Logdateien, Erneuern von Zertifikaten, DynDNS oder andere Programme zur Instandhaltung des Systems
  • Der Cron-Daemon überwacht dazu verschiedene Dateien und Verzeichnisse, in denen Anweisungen liegen, die in regelmäßigen Abständen ausgeführt werden sollen (crontabs).
  • Beim Start des Daemons wird die Tabelle in den Arbeitsspeicher geladen
  • Es wird minütlich nach auszuführenden Jobs und Änderungen im crontab geprüft

Crontabs

  • Um Syntaxfehler zu vermeiden, werden die Tabellen nicht nur mit dem Texteditor bearbeitet, sondern über den Befehl: crontab

User-Crontab

  • Jeder Benutzer des Systems kann eine eigene Crontab erstellen und bearbeiten
  • Die Jobs, die darin aufgeführt sind, werden von Cron unter der jeweiligen Benutzerkennung ausgeführt

Systemweiter Crontab

  • Befindet sich unter /etc/crontab
  • Das Format unterscheidet sich etwas von den Benutzercrontabs

/etc/cron.d/

  • Hier können sich Dateien im selben Format wie in /etc/crontab befinden
  • nützlich für Snippets
  • Alternativ auch in cron.daily, cron.hourly, cron.monthly oder cron.weekly

Aufbau einer Crontab-Datei

* * * * * auszuführender Befehl
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ └──── Wochentag (0-7 oder Sun, Mon, Tue,etc) (Sonntag =0 oder =7)
│ │ │ └────── Monat (1-12 oder Jan, Feb, etc)
│ │ └──────── Tag (1-31)
│ └────────── Stunde (0-23)
└──────────── Minute (0-59)

z.B. wöchtenliches Backup der Heimatverzeichnisse aller Benutzer um 3 Uhr morgens:

0 3 * * 1 tar -zcf /var/backups/home.tgz /home/

Beispiele

*/2 - Dieser Eintrag führt die Aufgabe alle 2 Minuten aus.
*/2 * * * * /pfad/zum/skript.sh
1,3,5,9 - Dieser Eintrag führt die Aufgabe zu bestimmten Minuten aus, nämlich 1, 3, 5 und 9.
1,3,5,9 * * * * /pfad/zum/skript.sh
5-9 - Dieser Eintrag führt die Aufgabe von Minute 5 bis Minute 9 in jeder Stunde aus.
5-9 * * * * /pfad/zum/skript.sh

Verwaltung von Crontab

Eigene Crontab anzeigen

  • crontab -l

Crontab eines anderen Benutzers anzeigen

  • crontab -lu Benutzer

Crontab bearbeiten

  • crontab -e

Crontab löschen

  • crontab -r

Crontab aus einer Datei lesen

  • crontab /Pfad/zur/Datei

Cron vs. Daemon (Hintergrundprozess)

  • Ein Daemon läuft immer, d.h.:
    • + Updates laufen häufiger als einmal pro Minute
    • + Es kann sich an seinen vorherigen Status erinnern, falls es notwendig ist
    • - Verbraucht RAM selbst wenn es gerade nichts tut
    • - Memory Leaks sind ein Problem, falls es sie gibt
    • - Abhängig von der Implementation wird es nicht automatisch bei Fehlern neu gestartet
  • Wenn man also eher robuste Aufgaben verteilt, empfiehlt sich Cron.
  • Bei performance-lastigen Aufgaben eher ein Daemon.
Man muss aber je nach Situation selbst entscheiden, was mehr Sinn macht.

Alternative Systemd

  • Systemd-Service Dateien haben auch eine Timer-Funktion, wenn man sie einstellen will.
  • Kann manchmal präziser sein, da Systemd die Zeit ab dem Boot zählt.

Aufgaben