Was ist CRON im UNIX-System OS X?

Hairfeti

Mitglied
Thread Starter
Dabei seit
08.11.2003
Beiträge
464
Reaktionspunkte
0
Da ich heute Lust habe, arbeiten wir das heute von mir angekündigte Thema auch gleich ab.

Ich möchte hier noch einmal darauf hinweisen, daß sich alle meine FAQ-Postings auf meinen Anfangsbeitrag "Kochkurs für UNIXEN" beziehen, den man nur am Anfang der FAQ auffindet, in dem man sich alle Einträge anzeigen lässt.

Weiterhin sind meine Ausführungen teilweise wie ein Aufbaukurs gestaltet, so daß man den ersten Beitrag gelesen haben muß, um die anderen begreifen zu können. Das deshalb, weil ich mich sonst mehrmals unnötig wiederholen müßte und mir das kein Spaß macht. Die FAQ ist nun mal so gestaltet daß man nicht halten und walten kann wie man will, deshalb habe ich mir diesen Quatsch einfallen lassen, um dennoch eine gewisse Ordnung meiner Beiträge zu gewährleisten.

Was ist der Cron-Dienst in einem UNIX-System wie Mac OS X, was tut er, wie läuft er ab und wozu ist er nützlich? Damit beschäftigen wir uns jetzt.

Was zum Teufel ist also CRON? Wird einem damit ne Krone aufgesetzt und man regiert damit jetzt wie ein Kaiser oder König? Ja, so könnte man es zunächst ausdrücken, wenn man will.

Viele Leute sagen immer:

Mann, alles muß man allein machen, der Rechner ist vielleicht ein Happen dumm, wenn man nicht alles selbst macht ... und ... und ... und.

Cron ist ein Dienst der, wenn man ihn qualifiziert konfiguriert, einem eine Menge Arbeit im System bei der täglichen Arbeit abnehmen kann. Er läuft im Hintergrund ab, so daß man nicht direkt etwas von ihm mitbekommt. Nur manchmal, etwa morgens 3.15 Uhr, 4.30 Uhr und 5.30 Uhr in der Frühe kommt es einem vor als wenn irgendwas oder wer im Hintergrund die gesamte Festplatte löscht. Daß dies nicht geschieht, stellt man nach einem Neustart schnell fest, aber was passiert denn da wirklich?

Zunächst mal läuft Cron bei jedem schon im System wenn man es nicht abgestellt hat. Und zu gewissen Zeiten, meist früh morgens wenn man es nicht verändert, laufen einige Programme oder Scripts ab die das System warten und aufräumen oder Logfile komprimieren und ordnen, und noch einige Sachen mehr. Das sind Standardeinstellungen die bei der Installation des Systems mit eingerichtet werden.

Was hindert uns nun, den Standardeinträgen unsere privaten Wünsche diesbezüglich mit einzutragen und ablaufen zu lassen? Eigentlich nichts, oder?

Wenn man also unbedingt jeden Morgen seine gesamte Festplatte gelöscht haben möchte, so kann man das damit tun. Mancheiner will aber auch nur daß sich der Rechner ausschaltet bevor man ein wichtiges Dokument abgespeichert und gesichert hat, das kann man auch. Man kann aber auch hunderte Programme sinnvoll über den gesamten Tag verteilt im Hintergrund ablaufen lassen, ohne dabei noch einen Finger krumm zu machen. Und das ist dann die Krone des Kaisers meine ich, stimmts? Wenn man sich diesen Dienst so zu Nutzen machen kann, dann hat man den Hauptgewinn gezogen.

Dazu muß ich noch sagen daß CRON kein Spielzeug ist, und eine Arbeit damit nur in Erwägung zu ziehen ist, wenn man ernsthaft damit eine Automatisierung von Abläufen zum Vorteil des Systems erreichen möchte. CRON ist ein Dienst des Vertrauens, da vorallem Abläufe damit realisiert werden die im Namen des Root ein System in Hochform halten und nicht das Gegenteil bewirken sollen. Will man Programme zu einem bestimmten Zweck testen, sollte man dazu lieber Apple-Script oder eine niedere Form der Shell verwenden die nicht so viel Schaden anrichten können wie ein Terminal-Befehl eines System-Administrators.

Schauen wir uns also zunächst mal im Terminal eine Cronjob-Datei an und finden die Wirkungsweise von CRON heraus:

@root>more /etc/crontab

Da sehen wir nun folgendes:

# /etc/crontab
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
HOME=/var/log
#
#minute hour mday month wday who command
#
#*/5 * * * * root /usr/libexec/atrun
#
# Run daily/weekly/monthly jobs.
15 3 * * * root periodic daily
30 4 * * 6 root periodic weekly
30 5 1 * * root periodic monthly

Das sind zunächst mal Shellangaben, ne Menge Zahlen, Rauten und Wörter die man sich mit etwas Fantasie schon zusammenreimen könnte. Von oben nach unten lese ich euch mal vor was da steht und übersetze es mal für uns.

Ich heiße crontab und liege im Verzeichnis etc in der Rootebene (/)

Meine Shell zur Ausführung von Programmen und Aktionen ist die sh in /bin

Pfade die für Programme und auszuführende Befehle in Frage kommen sind nur in den Verzeichnissen /etc:/bin:/sbin:/usr/bin:/usr/sbin zu erwarten und üblich, wenn Befehle ohne Pfadangaben abgegeben werden.

Das Homeverzeichnis für LogFile ist /var

Minute, Stunde, Tag, Monat, Tag des Monats, von wem, Befehl
das sollte eindeutig und verständlich sein.

Nach der Reihenfolge wird ein genauer Startpunkt von Programmen durch den Crondienst ermöglicht.

Jeden Tag der Woche, jeden Monat, 3.15 Uhr erfolgt damit der Root-Befehl periodic daily

Am 6. Tag der Woche, jeden Monat, 4.30 der Befehl periodic weekly

Am ersten Tag des Monats, jeden Monat, 5.30 der Befehl periodic monthly

Aufräumarbeiten die für das System wichtig sind. Was macht man aber nun wenn man nie um diese Zeiten den Rechner in Gebrauch hat? Nun, dann ändert man diese Zeiten zu solchen wie sie für uns zutreffen würden. Ganz einfach.

Alle Cronjobs der Benutzer des Computers liegen im Normalfall im Verzeichnis "/var/cron/tabs/" in einer Datei die den Namen des Benutzers trägt. Heißt man also "Holzlatte", so legt man als Root in das Verzeichnis eine Datei namens "Holzlatte" und richtet dort die gewünschten Cronjobs des Benutzers ein so wie wir es oben gelernt haben. Anders ist es leider nicht möglich, ich sagte schon daß der Dienst auf Vertrauen basiert und vom System-Admin eine Erlaubnis benötigt.

Programme die man zur Anwendung bringen könnte, werde ich hier im Rahmen meiner Erklärung aus Sicherheitsgründen nicht nennen und weitergeben. Ich hoffe ihr habt dafür Verständnis. Jeder der sich mit dem Terminal und der Shell soweit auskennt wie es für die Sicherheit des Systems erforderlich ist, kennt gängige Befehle die man mit dem Crondienst ausführen kann und weiß über deren Ausführung bescheid.

Das wars dann ... Alles Gute an alle ...
 
Zuletzt bearbeitet:
hallo hairfeti,

diesmal war ich schneller als die mods und poste meine Antwort da, wo sie hingehört, nämlich hier bei deinem Beitrag.

Super, dass du Dir soviel Mühe machst, tut einem UserForum immer gut, wenn sich jemand engagiert.
Wenn man dass dann noch mit etwas perönlichem Humor würzt:
Was zum Teufel ist also CRON? Wird einem damit ne Krone aufgesetzt und man regiert damit jetzt wie ein Kaiser oder König?
macht es auch noch richtig Spass.

/\/\
.(*>... hairfeti gewinnt damit die macuser-Kaiser-Crone /\/\/\/\ für diesem Beitrag
.//\
V_/___

Ich möchte gerne noch folgende Ergänzungen zum Beitrag von hairfeti anfügen:

1. Der Crondienst kann auch Skripte oder ähnliches unter anderem Namen als "root" starten; dies laufen dann mit den berechtigungen ab, die der angegebene Benutzer (z. B nobody oder sql oder postfix oder oder oder) eben hat ab. Zum Testen ist das vielleicht gar nicht so schlecht.

2. auch die Ausführung von Befehlen, die nicht in einem Skript oder Programm vorliegen ist möglich. Hier ein Beispel:
50 16 * * * maceis open -a textedit /Users/maceis/Documents/feierabend.endung_nach_wahl

Dieser Eintrag veranlasst den CRON Dienst die Datei feierabend.endung_nach_wahl die im Dokumenteverzsichnis von User maceisliegt, täglich um 16:50 Uhr mit dem Programm TextEdit auf der grafischen Oberfläche zu öffnen.
Diese könnte z. B die Erinnerung enthalten "Aufräumen, sonst erwischt Du den Zug nicht!"

3. Beim Starten von Skripten kann man erzwingen, dass die Ausgabe des Skriptes wahlweise
a) in eine Datei geschrieben wird, damit man sich das später durchelsen kann
b) im Nirvana verschwindet, weil man es eben nicht lesen will
c) per email versendet wird und zwar entweder lokal (nein - nicht ins Lokal!) an einen bestimmten Benutzer oder an eine Email Adresse ins Internet.
Voraussetzung, ein mailserver muss aktiv sein

Wenn Interesse besteht, liefere ich gerne mehr Info dazu.

Bei den vorkonfigurierten periodic Skripts (dies übrigens hochinteressant sind) kann dies übrigens sehr komfortabel übder die entsprechenden Einträge in der Konfigurationsdatei erledigt werden.

.(*>... tschüüs
.//\
V_/___
 
Ja, danke erst mal für dein Lob.

Und auch deine Ergänzung akzeptiere ich, die ist in Ordnung.

Dazu noch folgendes:

Es gibt gut 1000 weitere Möglichkeiten und mehr wie man mit den Ressourcen aus meinen Beschreibungen umgehen kann. Ich rede hier stets nur immer von einem kleinen Einstieg in die Materie und erkläre das an Beispielen die eine erste Funktionsfähigkeit solcher Dienste ermöglichen und zur Folge haben.

Wer also denkt daß meine Erklärungen der Höhepunkt der Apocalypse sind, der irrt sich gewaltig. Mein Ziel ist es, Interesse für ein bestimmtes Gebiet zu erwecken und auch ersten Nutzen daraus zu erkennen.

Wer also ernsthaft eine Arbeit mit den von mir beschriebenen Themen in Betracht zieht, muß sich anschließend noch selbst auf diesem Gebiet eine Menge Wissen aneignen um den Gesamtablauf einer Sache ausreichend verstehen zu können.

Dazu erwähne ich hier mal das Internet schlechthin, Buchmaterial oder Beschreibungen in Form von PDF auf CD. Ich selbst habe zwar schon alles getan über was ich hier rede, verstehe aber nicht einmal die Hälfte davon.

Man kann nicht alles gleichzeitig tun. Als Mensch ist es eigentlich ausreichend wenn man sich einem der von mir erwähnten Themen zuwendet um dieses korrekt abzuhandeln, das reicht völlig aus. Anschließend nimmt man sich das nächste vor, wenn Interesse besteht. Das nur als Tip nebenbei, aus eigener Erfahrung.

Ich bin kein Statist, aber mein Gefühl sagt mir, daß ihr etwa 80% eurer Ressourcen in einem UNIX-System gar nicht nutzt,

weil ihr sie nicht kennt,

weil sie von den Erstellern der Software in der Öffentlichkeit nicht ausreichend dokumentiert werden,

und weil ihr sie für euren persönlichen Zweck im Normalfall gar nicht einsetzen würdet.

Allein diese Punkte sprechen schon für sich, daß die Allgemeinheit einer Aufklärung bedarf. Wir sind dabei ganz auf uns selbst gestellt. Im Rahmen eines solchen Forums hier ist es aber machbar daß sich viele kluge Köpfe zusammen finden können um ein Problem aus der Welt zu schaffen.

Ich bitte daher alle Teilnehmer die über ein geeignetes Wissen verfügen, sich an dieser Aufklärung zu beteiligen und nicht nur an sich selbst zu denken. Jeder Tip und jeder Hinweis kann hilfreich sein. Und auch wenn man schon viel weiß, kann man immer wieder eine Menge hinzu lernen.

In dem Sinne ...

MfG Hairfeti
 
Hairfeti macht hier viele Worte um wenig Informationen. Daher werde ich mal versuchen, dieses Thema in einer dem FAQ-Forum gerechten Form zussammenzufassen. Außerdem vermischt Hairfeti Dinge, die nicht zusammengehören. Die periodic-Scripts haben nämlich, außer der Tatsache, dass sie von cron zeitgesteuert gestartet werden, nichts mit cron zu tun. Der Inhalt dieser Scripts sollte deshalb in einem anderen Artikel besprochen werden.


1. Was ist cron?
cron ist ein unsichtbar im Hintergrund laufender Systemdienst (Deamon), der zeitgesteuert Shell-Befehle ausführt.

2. Wie werden cronjobs eingerichtet?
cron-jobs sind in crontab-Dateien für jeden Benutzer eingerichtet. Der crontab für das System ist die Datei /etc/crontab, die crontabs für die verschiedenen Benutzer liegen in /var/cron/cron/tabs und tragen den Namen des jeweiligen Benutzers.
crontabs werden mit dem Befehl "crontab" geändert. Für Mac-User, die nicht das Terminal dafür bemühen wollen, gibt es GUI-Frontends, z.B. das Programm "cronniX".

3. Wie ist ein crontab aufgebaut?
Ein crontab hat die Form einer Tabelle. In den Zeilen sind die Ausführungszeiten und der dazu gehörende Befehl eingetragen. Die Ausführungszeiten werden durch Eintrage in den entsprechenden Spalten definitert. Hierfür stehen Spalten für Minute (min), Stunde (hour), Tag im Monat (mday), Monat (month) und Wochentag (wday) zur Verfügung.
In die jeweilige Zeile wird ein Zahlenwert eingetragen, "*" bedeutet "alle". Ein Zeitintervall kann in den Spalten Minute und Stunde mit einem "/" und einer Zahl definiert werden, "*/5" in der Spalte min bedeutet "alle fünf Minuten". Außerdem sind Von-Bis-Werte möglich. "8-16" in der Spalte hour bedeutet "von 8 bis 16 Uhr".
In den letzten beiden Spalten werden der Benutzer und der Befehl eingetragen.
 
hallo zusammen drumm,

klitzekleine Ergänzung zum Beitrag von ._ut, Punkt 3.

es ist auch eine Zeitangabe in Form einer kommaseparierten Liste möglich, z. B wenn eine Ausführung in unregelmäßigen Intervallen gewünscht wird.
Beispiel:
00,20,50 16 * * * root /scripts/netzzeit
Ergebnis:
Täglich um 16:00, um 16:20 und um 16:50 wird das angegebene Skript (hier: /scripts/netzzeit) mit root-Rechten ausgeführt.

toll, ne ? :D
 
Noch kürzer: "man cron" und "man crontab"
 
genau asg :D

aber das Lesen von manpages ist in diesem Forum (so scheint´s mir jedenfalls) mindestens so verpöhnt wie der Hinweis auf dieselben :D
hast du noch keine "Abmahnung" erhalten ? *ggg*
 
hallo admartinator -

so ganz versteh ich das jetzt nicht (nur ein ganz kleines bisschen),
ist das denn wirklich soooo viel verlangt ?
wenn man nach den man pages nicht weiterkommt, kann man ja immer noch fragen.

wenn du wllst (aber nur dann), dann lies doch mal bitte das hier dazu.
Ich weiss, es ist lang, aber ich finde das okay.
 
Original geschrieben von admartinator
 

Das sind genau _die_ Antworten, die ich Linux-Foren immer geliebt habe... :(

Martin
 

Was hast Du gegen lesen an sich?
Wozu sind man pages sonst da? Das diese von 1% angeschaut werden, um dann den restlichen 99% ein vorgekautes 5-Gänge Menu zu präsentieren?
 
Original geschrieben von maceis
genau asg :D

aber das Lesen von manpages ist in diesem Forum (so scheint´s mir jedenfalls) mindestens so verpöhnt wie der Hinweis auf dieselben :D
hast du noch keine "Abmahnung" erhalten ? *ggg*
 

Hehe.
Eine Abmahnung dafür das die Leute wenigstens man "man $irgendwas" aufrufen bevor sie nach einem Howto/Tutorial schreien?
 
:D
Wozu sind man pages sonst da? Das diese von 1% angeschaut werden, um dann den restlichen 99% ein vorgekautes 5-Gänge Menu zu präsentieren?
Zumal man dieses ja auch erstmal suchen, lesen und verstehen muss :D :D :
 
Naja, es gäbe ja einen guten Mittelweg. Wenn man noch nicht mal weiss welche manpage man aufrufen muss hat man auch als interessierter User verloren. Ich fände eine kurz ausgeführte Einleitung gut, die beschreibt was es für interessante Konstrukte gibt. Für tiefergehende Information kommt man um das lesen von manpages nicht herum, da hilft keine noch so blumig ausgeschmückte FAQ. Dafür ist Unix deutlich zu komplex. Mein Einstieg in Unix, der inzwischen ein rundes Jahrzent zurückliegt, bestand aus einer Mischung von Lesen und Ausprobieren.
 
Zurück
Oben Unten