TweakPC

Zurück   Computer Hardware Forum - TweakPC > News & Hilfen > Tutorials

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 20.10.2007, 14:23   #1 (permalink)
Die Kerrimaus
 
Benutzerbild von kerri
 

Registriert seit: 17.11.2003
Beiträge: 2.987

kerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz sein

Standard [Tutorial] [Linux] Cron & Crontab - Zeitgesteuerte Befehlsausfuehrung

Cron - Zeitsteuerung unter Linux

Dieses Tutorial richtet sich an diejenigen unter Euch, die Linux nutzen oder betreiben, und immer wiederkehrende Aufgaben automatisiert durchfuehren moechten. Es werden Grundkenntnisse in Linux vorausgesetzt, etwa was ist eine Shell, wie ruft man Befehle in einer Shell auf und wie erzeugt und editiert man Dateien unter Linux.

Inhalt:
Was ist cron?
Funktionsweise von cron
Syntax einer Crontab-Datei
Crontab-Verwaltung
Tipps & Tricks fuer die Crontab-Dateieintraege
Cron & Root



Was ist cron?

Cron ist vergleichbar mit einer Zeitschaltuhr und wird zum automatischen Starten immer wiederkehrender Aufgaben verwendet. Cron selbst wird auf den allermeisten linuxartigen Systemen automatisch mit installiert und beim Hochfahren des Rechners als Daémon gestartet. Unter Daémon versteht man einen Prozess, der im Hintergrund des Systems laeuft, und von dem man normalerweise keine Ausgabe sieht.

Ob cron auf dem eigenen System laeuft, kann man beispielsweise mit dem Befehl
Code:
/etc/init.d/crond status
herausfinden. Erhaelt man crond (pid 1234) is running... oder aehnliches als Ausgabe, laeuft cron. Ansonsten muss man dafuer sorgen, dass, falls noetig, cron nachinstalliert wird, und dass cron beim Systemstart automatisch gestartet wird.

Seine Anweisungen erhaelt cron mittels sogenannter crontab-Dateien, in denen Uhrzeiten, sowie die Programme gespeichert sind, dieausgefuehrt werden sollen. Es gibt eine systemweite Crontab-Datei unter /etc/crontab Veraenderungen an dieser Datei sollten jedoch mit absoluter Vorsicht vorgenommen werden.

Funktionsweise von cron

Cron liest bei seinem eigenen Start die Crontab-Dateien ein, und legt sich selbst schlafen, bis zu dem Zeitpunkt, an dem der naechste Befehl ausgefuehrt werden muss, erwacht, fuehrt den Befehl aus, und legt sich anschliessend wieder schlafen. Aenderungen, die mittels des Crontab-Verwaltungstools an den Crontab-Dateien gemacht werden, veranlassen Cron auch, diese sofort neu einzulesen.

Befehle, die cron startet, werden mit den Rechten des Users ausgefuehrt, dem die entsprechende Crontab-Datei gehoert. Produziert der ausgefuehrte Befehl Output, wird dieser dem User, dem die Cron-Tabelle gehoert, per Mail geschickt. Ist jedoch der Rechner zu dem Zeitpunkt abgeschaltet, zu dem der naechste Befehl ausgefuehrt werden muesste, wird der Befehl von Cron nicht beim naechsten Rechnerstart ausgefuehrt. will man das, mus man beispielsweise auf das Tool anacron ausweichen.

Eine weitere Besonderheit stellt die Umstellung auf Sommerzeit dar. Die meisten Cron-Implementationen verhalten sich in etwa so: Wird die Systemuhr um weniger als 3 Stunden nach vorn verstellt, werden Befehle, die in dem uebersprungenen Zeitintervall liegen, sofort ausgefuehrt. Wird die Uhr um weniger als 3 Stunden nach hinten verstellt, sorgt Cron selbstaendig dafuer, dass die Befehle nicht ein zweites Mal ausgefuehrt werden. Das betrifft allerdings nur Befehle, die maximal einmal pro Stunde ausgefuehrt werden. Zeitaenderungen um mehr als 3 Stunden werden von cron allerdings nicht speziell behandelt.

Cron protokolliert ueblicherweise seine Arbeit unter /var/log/cron. Ein Blick in diese Datei koennte zum Finden eventuell auftretender Probleme recht nuetzlich sein.

Weitere Informationen finden sich auch unter
Code:
man cron
Syntax einer Crontab-Datei
Oder: Wie teilt man diesem Cron-Daémon nun eigentlich mit, wann er was zu tun hat?

Dazu erstellt man mit einem beliebigen Texteditor seiner Wahl eine einfache Textdatei (beispielsweise .crontab im Homeverzeichnis). In dieser Datei wird jeder Befehl, der ausgefuehrt werden soll, in genau einer Zeile konfiguriert. Die Zeile enthaelt dabei die folgenden 6 Felder:
Code:
Minute   Stunde  Tag     Monat     Wochentag       Befehl
dabei bedeuten:
Minute
Die Minute, zu der das Skript ausgefuehrt werden soll. (Wertebereich: 0-59, *)
Stunde
Entsprechend die Stunde. (Wertebereich: 0-23, *)
Tag
Der Tag im Monat. (Wertebereich: 1-31, *)
Monat
Der Monat. Symbolische Angaben auf Englisch sind moeglich: Jan, Feb, usw., wobei Klein-/Grossschreibung egal ist. (Wertebereich: 1-12, *, symbolische Namen)
Wochentag
Die Tage der Woche (0 (Sonntag) 6 (Sonnabend)). Der Sonntag kann auch als 7 bezeichnet werden. Hier kann symbolisch gearbeitet werden: Mon, Tue, usw., Klein-/Grossschreibung ist dabei egal. (Wertebereich: 0-7, *, symbolische Namen)
Befehl
Der Befehl, der ausgefuehrt werden soll. Befehle, die sich in $PATH-Verzeichnissen befinden, gehen so, ist aber ratsam, die kompletten Pfade auszuschreiben. Damit stellt man sicher, dass immer der richtige Befehl gefunden wird, statt sich darauf zu verlassen, dass $PATH richtig gesetzt ist. Moeglicher Fallstrick: Ein '%' im Befehl bedeutet ein Zeilenende; alles, was danach kommt, erhaelt der Befehl als Standardeingabe. Braucht man ein '%'-Zeichen, so ist dieses mit \ zu escapen.
Stehen mehrere Eintraege in einem der 6 Felder, so werden die mit Komma (ohne Leerzeichen!) getrennt. Die 6 Felder selbst werden mit Leerzeichen voneinander getrennt. Ein Leerzeichen innerhalb des 6. Feldes Befehl wird jedoch als Leerzeichen interpretiert.

Wenn sich unter den zeitlichen Angaben - Minute, Stunde, Tag, Monat und Wochentag - ein * befindet, wird diese Spalte ignoriert bzw. als Wildcard fuer jeden moeglichen Wert interpretiert (z.B. wenn Stunde = * wird der Befehl jede Stunde ausgefuehrt).

Zusaetzlich kann man auch Zeitschritte angeben. / gefolgt von einer Zahl bezeichnet dabei eine schrittweise Angabe: */2 bedeutet jeden zweiten Wert, im Feld Monat also 2,4,6,8,10,12 im Feld Wochentag entsprechend 2,4,6 (Di,Do,Sa). Ausserdem koennen Bereiche angegeben werden: 2,3,4,6 kann beispielsweise auch als 2-4,6 geschrieben werden. Noch spezieller: 35-49/3 liefert z.B. 35,38,41,44,47 - kann man ja mal brauchen.....

Achtung: Sind sowohl Tag, als auch Wochentag gesetzt, werden beide durch ein logisches ODER verknuepft!

Kommentare in der crontab-Datei werden mit einem Hash-Zeichen (#) eingeleitet.

Ausserdem koennen in der Crontab-Datei Umgebungsvariablen wie $SHELL, $PATH und $HOME gesetzt werden, indem in der Crontab-Datei UMGEBUNGSVARIABLE=wert oberhalb der eigentlichen Befehlsdefinitionen notiert. Als nuetzlich sie hier DISPLAY=:0. erwaehnt. Damit koennen auch von Cron grafische Programme gestartet werden.

Noch ein paar Beispiele fuer Eintraege in der Crontab-Datei:
Code:
 
SHELL=/bin/bash

#Min Std   Tag   Mon   WT  Befehl
*    *     *     *     *   echo "Jede Minute, rund um die Uhr, jeden Tag, IMMER!"
0    22    *     *     6   echo "Nur Sonnabends um 22:00."
0    22    1,15  *     5   echo "Am 1. und 15. jeden Monats um 22:00, ausserdem jeden Freitag um 22:00."
0    */2   *     *     *   echo "Alle 2 Stunden."
Lange Befehle machen Cron-Tabellen oft schnell unuebersichtlich. Daher ist es ratsam, fuer komplexere Aufgaben kleine Shell-Skripte zu erstellen, und diese dann von Cron ausfuehren zu lassen.

Weitere Informationen finden sich auch in
Code:
man 5 crontab
Crontab-Verwaltung

Wenn man nun eine Datei mit crontab-Syntax erstellt hat, weiss cron noch nichts davon. Der Befehl
Code:
crontab
dient dem Erzeugen, Modifizieren bzw. Loeschen von Cron-Tabellen.

Cron eine bereits erstellte Crontab-Datei verfuegbar macht man mit dem Befehl
Code:
crontab /pfad/zur/crontabdatei
Erhaelt man hier keine Rueckmeldung, ist alles glatt gelaufen, und man kann sich die eben installierte Crontab-Datei anschauen mit
Code:
crontab -l
Erhaelt man jedoch beispielsweise die Meldung You (kerri) are not allowed to use this program (crontab), hilft nur der Weg zum Sysadmin, der einen offenbar von der Benutzung von Cronjobs ausgeschlossen hat.

Eine bereits installierte eigene Cron-Tabelle editieren kann man mit dem Befehl
Code:
crontab -e
wobei hier der Standardeditor (ueblicherweise der fuer Anfaenger schwierig zu bedienende vi) verwendet wird.
Code:
crontab -r
loescht die Crontab-Datei.

Achtung: Wenn man bereits eine Cron-Tabelle installiert hat, ueberschreibt man bei Verwendung von
Code:
crontab /pfad/zur/neuen/crontabdatei
die alte! Dieses Problem umgeht man, indem man die vorhandene Cron-Tabelle mittels
Code:
crontab -e
editiert, oder den Inhalt der alten Crontab-Datei in die neue uebernimmt. Das geht beispielsweise, indem man die Ausgabe von
Code:
crontab -l
kopiert und zu den neuen Angaben hinzufuegt.

Weitere Informationen finden sich auch unter
Code:
man crontab
Tipps & Tricks fuer die Crontab-Dateieintraege

Output, der von den ausgefuehrten Befehlen produziert wird, wird dem jeweiligen Benutzer als Mail zugestellt. Will man das nicht, kann man Output unterdruecken, in dem man ans Ende des Befehls
Code:
> /dev/null
anhaengt. Fehlermeldungen (also Dinge, die an stderr gesendet wird) werden dann immernoch per Mail an den User geschickt! Das zusaetzlich unterdruecken kann man entweder mit
Code:
> /dev/null 2>&1
Bedeutet in etwa: den 2. Output-Kanal (also stderr) auf den 1. (stdout) umbiegen, der ja schon per
Code:
> /dev/null
weggeworfen wird. Alternativ sollte
Code:
2&1>/dev/null
das gleiche tun. Moeglichkeit 3, ganz anders: Will man bei keinem Crontab-Eintrag ueberhaupt niemals nicht auf keinen Fall eine Mail, kann mans unterdruecken, indem man MAILTO="" an den Anfang der crontab-Datei schreibt.

MAILTO="username" am Anfang der crontab-Datei schickt allen entstehenden Output per Mail an username, unabhaengig davon, wessen cronjob den Output produziert. MAILTO="name@example.com" schickt die Mail mit dem Output an die entsprechend angegebene Adresse. (Voraussetzung dafuer ist allerdings, dass sendmail installiert ist und laeuft.)

Cron & Root

Als root kann man sich die Crontabs der User mit
Code:
crontab -u username -l
anzeigen lassen. Alternativ liegen sie unter /var/spool/cron/username, sollten da aber nicht direkt editiert werden,
Code:
crontab -u username -e
ist hier der Befehl der Wahl.

Usern den Zugriff auf Cron verbieten kann man, indem man den User in die cron.deny-Datei eintraegt. Diese findet sich ueblicherweise unter /etc/cron.deny.

In der systemweiten crontab-Datei /etc/crontab ist ein zusaetzliches Feld noetig:
Code:
Minute   Stunde  Tag     Monat     Wochentag   Username    Befehl
Username
Der User, mit dessen Rechten das Skript ausgefuehrt werden soll.
Ansonsten wie gehabt.

Cron selbst wird auch verwendet, um Systemaufgaben zu erledigen. Dazu gibt es ueblicherweise 4 Verzeichnisse, /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/ und /etc/cron.monthly/. In diesen Verzeichnissen werden einfach die Skripten abgelegt bzw. verlinkt, die in entsprechenden Rhythmen durchgefuehrt werden sollen. Wann genau die Inhalte der Verzeichnisse abgearbeitet werden, ist in der Datei /etc/crontab festgelegt, die beispielsweise bei Fedora Core standardmaessig so aussieht:
Code:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
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
Zum einen werden da zunaechst einige Umgebungsvariablen (SHELL, PATH, MAILTO und HOME) gesetzt, anschliessend wird festgelegt, wann die Inhalte der Verzeichnisse abzuarbeiten sind: die stuendlich zu erledigenden Aufgaben jeweils eine Minute nach der vollen Stunde, die taeglichen Aufgaben um 4:02 morgens, die woechentlichen jeden Sonnabend morgens um 4:22, und die monatlich wiederkehrenden Aufgaben am 1. jeden Monats um 4:42.
Code:
run-parts
ist dabei ein Shell-Skript, was die Inhalte der entsprechenden Verzeichnisse abarbeitet.

Diskussion, Verbesserungsvorschlaege, etc bitte hier

Liebe Gruesse von Kerri, die sich jeden Morgen von Cron wecken laesst.

Ps.: Warum zur Hoelle wird den Dae-mon (ohne Bindestrich) versternchent? *verwundert den Kopf schuettelt*
kerri ist offline   Mit Zitat antworten
7 Benutzer bedanken sich für den Beitrag:
Exit (22.10.2007), Markus (23.10.2007), Robert (24.10.2007), redfalcon (20.10.2007), tele (24.10.2007), [Hornet] (20.10.2007), _Smash_ (23.10.2007)
Alt 20.10.2007, 14:24   #2 (permalink)
Die Kerrimaus
 
Benutzerbild von kerri
 

Registriert seit: 17.11.2003
Beiträge: 2.987

kerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz sein

Standard [Diskussion] Cron & Crontab - Zeitgesteuerte Befehlsausfuehrung

Hier geht es um das Tutorial [Tutorial] [Linux] Cron & Crontab - Zeitgesteuerte Befehlsausfuehrung.

Ja, ich weiss, dass das nicht allzu viele von Euch insteressieren wird, aber selbst, wenns nur fuer eine handvoll von Euch was nuetzt, bin ich gluecklich

Liebe Gruesse, Kerri
kerri ist offline   Mit Zitat antworten
Alt 20.10.2007, 16:08   #3 (permalink)
Tweaker
 

Registriert seit: 22.11.2005
Beiträge: 599

Neosoul sorgt für eine eindrucksvolle AtmosphäreNeosoul sorgt für eine eindrucksvolle Atmosphäre

Standard AW: [Diskussion] Cron & Crontab - Zeitgesteuerte Befehlsausfuehrung

Danke fürs Tut, Kerri.

Dea-mon wird bestimmt wegen den sog. Dea-mon-Tools gesperrt (natürlich ohne Bindestrich). Vermute ich jetzt zumindest mal.

MfG
Neosoul
Neosoul ist offline   Mit Zitat antworten
Alt 23.10.2007, 22:55   #4 (permalink)
Nachtduscher
 
Benutzerbild von _Smash_
 

Registriert seit: 22.01.2002
Beiträge: 12.569

_Smash_ ist ein wunderbarer Anblick_Smash_ ist ein wunderbarer Anblick_Smash_ ist ein wunderbarer Anblick_Smash_ ist ein wunderbarer Anblick_Smash_ ist ein wunderbarer Anblick_Smash_ ist ein wunderbarer Anblick_Smash_ ist ein wunderbarer Anblick

Standard AW: [Diskussion] Cron & Crontab - Zeitgesteuerte Befehlsausfuehrung

Zitat:
Zitat von Neosoul Beitrag anzeigen
Dea-mon wird bestimmt wegen den sog. Dea-mon-Tools gesperrt (natürlich ohne Bindestrich). Vermute ich jetzt zumindest mal.
So ist es.
_Smash_ ist offline   Mit Zitat antworten
Alt 24.10.2007, 08:25   #5 (permalink)
Neuling
 

Registriert seit: 24.10.2007
Beiträge: 1

Johny befindet sich auf einem aufstrebenden Ast

Standard AW: [Diskussion] Cron & Crontab - Zeitgesteuerte Befehlsausfuehrung

Vielen Dank!
Johny ist offline   Mit Zitat antworten
Alt 24.10.2007, 08:45   #6 (permalink)
Polsterwaffenkampfsportle r
 
Benutzerbild von tele
 

Registriert seit: 29.10.2003
Beiträge: 14.561

tele hat eine strahlende Zukunft
tele hat eine strahlende Zukunfttele hat eine strahlende Zukunfttele hat eine strahlende Zukunfttele hat eine strahlende Zukunfttele hat eine strahlende Zukunft

Standard AW: [Diskussion] Cron & Crontab - Zeitgesteuerte Befehlsausfuehrung

Die Hand aus "handvoll" hat bereits 6 finger
tele ist offline   Mit Zitat antworten
Alt 24.10.2007, 09:02   #7 (permalink)
Die Kerrimaus
 
Benutzerbild von kerri
 

Registriert seit: 17.11.2003
Beiträge: 2.987

kerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz sein

Standard AW: [Diskussion] Cron & Crontab - Zeitgesteuerte Befehlsausfuehrung

Soll vorkommen

Gruesse, Kerri
kerri ist offline   Mit Zitat antworten
Antwort

Stichworte
befehlsausfuehrung, cron, crontab, linux, tutorial, zeitgesteuerte


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist aus.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[News] Steam für Linux fertig - Rabatt auf Linux-Spiele TweakPC Newsbot News 0 15.02.2013 11:00
[News] SuSE Linux OEM - Linux auf Komplett-Rechnern vorinstalliert TweakPC Newsbot News Archiv 0 07.10.2008 21:40
[News] Tutorial: Linux auf die Xbox TweakPC Newsbot News Archiv 0 29.09.2008 13:24
[S] Photoshop CS3 Tutorial Enforc3r Windows & Programme 5 18.04.2008 20:41
WSH-Tutorial HyperY2K Programmiersprachen 12 10.02.2004 14:09


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 Uhr.




Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2021, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.
Impressum, Datenschutz Copyright © 1999-2015 TweakPC, Alle Rechte vorbehalten, all rights reserved