Beschreibung

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

Cron ist ein Dienst der, wenn man ihn qualifiziert konfiguriert, eine Menge Arbeit im System bei der täglichen Arbeit sparen kann. Er läuft im Hintergrund, so dass 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, dass 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 AppleScript oder eine niedere Form der Shell verwenden die nicht so viel Schaden anrichten können wie ein Terminal-Befehl eines System-Administrators.

Was muss ich tun

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/tabs und tragen den Namen des jeweiligen Benutzers.

crontabs werden mit dem Befehl "crontab" geändert. Für Mac-User, die nicht das Terminal bemühen wollen, gibt es GUI-Frontends, z.B. das Programm "CronniX".

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.

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 (oder man führt als User "Holzlatte" im Terminal den Befehl "crontab -e" aus. Man bekommt dann eine leere crontab und kann diese dann nach seinen Wünschen "füllen". Natürlich können nur Programme/Scripte ausgeführt werden, für die man auch die entsprechenden Rechte besitzt.z.B: Ich habe bei mir einen User "Oracle" und will täglich einen Datenbank-Export durchführen. Der User "Oracle" hat alle Rechte für die Datenbank. Dann kann er in seine Crontab die entsprechenden Befehle/Scripte eintragen, die den Export erzeugen. Dazu sind keine root-Rechte erforderlich. Der Sys-Admin wird dazu nicht 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 ...

 Anmerkung 

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.

3. Seit Mac OS X 10.4 werden die periodic-Skripte nicht mehr über cron, sondern mittels launchd ausgeführt.

Verweise

Siehe auch
CronniX, MacJanitor
Kategorie
Betriebssystem

Zuletzt geändert am 08.10.2008 14:36 Uhr ( Besuche)

© 2004 – 2024 ApfelWiki

Impressum - Datenschutz

cb