JürgenSchilling

  EDV-Service | Fotografie | Fotoarbeiten   

 


 Home

 Black&White
 Fotogramme
 Infrarot
 Kategorien
 Lightbox
 Lochkamera
 Portrait
 

Advanced ___________

 Service:
 EDV-Manuals

 Belichtungszeitentabelle
 Schrauben u. Gewinde
 

 Einführung in die:
 Beurteilung v. Negativen
 Farbmischung
 Filmentwicklung
 Infrarotfotografie
 Blitzlichtfotographie
 
 Entwicklungszeiten:
 Agfa Rodinal
 Kodak D76

 Tiefenschärferechner:
 Komplex  Einfach


 Fotolabor


 Kontakt / Impressum

 
______

 Zähler:
 Bilder pro Gast
 Zugriffszähler

 myPHPadmin
 
B4YCounter

 Login  Logout
 
Files

 Alle Bilder als Link

Konfiguration und testen eines Cronjobs unter Linux / Unix.

Cron-Jobs werden über den Cron-Daemon gesteuert. Bei diesem handelt es sich um einen Hintergrundprozess, der im Prinzip ständig die Uhrzeit prüft und je nach seinen Einstellungen dann ggf. die ihm angegebenen Programme startet. Diese Programme führen meist Wartungsaufgaben durch. Die klassische Anwendung für Cron-Jobs ist z.B. das Löschen und Archivieren von Logdateien (Logrotation). Auch das regelmäßige Einspielen von Updates könnte von einem Cron-Job übernommen werden.


1) Script zum testen des Cron-Deamons:

Zunächst erstellen wir ein einfaches Shellscript , das wir dann automatisch vom Cron-Deamon starten lassen.
Dieses Script schreibt das aktuelle Datum in die Datei /tmp/cron-test.txt. Speichern tun wir das Skript unter /tmp.
 
 #!/bin/bash
date >> /tmp/cron-test.txt
exit 0

Die Datei speichern wir als "crontest.sh" ab und machen sie mit folgenden Kommando ausführbar:

chmod 755 crontest.sh


2) Crontab Kommandos

export EDITOR=vi ;einen Editor für das crontab File definieren (default ist VI).

crontab -e                    Editiert das crontab File, oder erzeugt eines, wenn keines vorhanden war.
crontab -l                     Zeigt das crontab File an.
crontab -r                     Löscht das crontab File.
crontab -u BENUTZER  Legt fest, mit welcher crontab-Datei gearbeitet werden soll


3) Den Cron-Deamon konfigurieren:

Die Konfiguration des Daemons funktioniert über die /etc/crontab, eine Tabelle in der steht welcher Prozeß zu welcher Zeit ausgeführt werden soll.
Auf den Systemen kann jeder Benutzer seine eigene Crontab verwenden. Eine systemweit geltende Crontab ist auf UNIX-Systemen im Normalfall unter /etc/crontab hinterlegt.

Die /etc/crontab wird mit folgendem Kommando angelegt bzw. editiert:

crontab -e

Wenn für den angemeldeten User noch keine "crontab" existiert,  öffnet sich jetzt der vi mit einer leeren Datei mit Namen /etc/crontab.
Die "crontab" darf nur über das Kommando "crontab -e" erstellt oder editiert werden. Das manuelle erstellen und editieren die /etc/crontab funktioniert nicht!

Mit folgender Zeile starten wir unser Testskript beispielsweise alle 5 Minuten:

/etc/crontab:

#Testskript
5 * * * * /tmp/crontest.sh
 


4) Die Syntax für die /etc/crontab:


In der Tabelle sind die Zeilen durch einen Zeilenumbruch getrennt. Die Tabelle besteht aus sechs Spalten, in der systemweiten Crontab sind es sieben.
Kommentare werden am Zeilenanfang mit # markiert. Die Spalten sind durch Leerzeichen voneinander getrennt. Die ersten fünf Spalten beschreiben die Zeit, zu der Befehl ausgeführt werden soll,
die letzte Spalte gibt den Befehl an sich an. Wird kein Benutzer angegeben, läuft das Script im Kontext des Users, der die /etc/crontab erstellt hat.


Minute  Stunde  Tag  Monat  Wochentag  Benutzer  Befehl

Dabei gilt:
 
Platzhalter mögliche Werte
MINUTE 0-59
STUNDE 0-23
TAG 1-31
MONAT 1-12 oder Jan, Feb, Mar,... (englische Bezeichner!)
WOCHENTAG 0-6, wobei 0 Sonntag bedeutet oder Sun, Mon, Tue,...
Benutzer Mit welchen Rechten soll das Script gestartet werden z.B. root
BEFEHL /Pfad/script.sh


Als Sonderzeichen steht das "*" zur Verfügung, was soviel wie "egal" bedeutet. Sollen mehrere Möglichkeiten angeboten werden, sind diese ohne Leerzeichen mit einem Komma voneinander zu trennen.
Zeitspannen gibt man an, indem man einen Bindestrich ohne Leerzeichen zwischen Anfangs- und Endwert setzt.
Immer dann, wenn die ersten fünf Einträge in der crontab mit der Systemzeit übereinstimmen, wird der darauf folgende Befehl ausgeführt.

Zahlenbereiche sind erlaubt. Bereiche sind zwei Zahlen, getrennt durch einen Bindestrich. Die angegebenen Grenzen sind inklusive.
Beispielsweise: 8-11 in "Stunde" bewirkt die Ausführung um 8, 9, 10, 11 Uhr.

Listen sind erlaubt. Eine Liste ist eine Menge von Nummern,  getrennt durch Kommata.
Beispiele: "1,2,5,9", "0-4,8-2".

Schrittweiten können in Verbindung mit Bereichen genutzt werden. Hinter einem Bereich mit "/<Schrittweite>" angegeben, bestimmt die Schrittweite, ob Werte innerhalb des Bereiches übersprungen werden.
Beispiel: "0-23/2" kann unter Stunden benutzt werden, um ein Kommando alle zwei Stunden auszuführen.
Die Alternative wäre:
"0,2,4,6,8,10,12,14,16,18,20,22".

Schrittweiten sind auch nach Sternen (*) erlaubt, "alle zwei Stunden" läßt sich auch durch "*/2" beschreiben.

Namen können für "Monat" und "Wochentag" benutzt werden. Benutzen Sie die ersten drei Buchstaben des entsprechenden Tages oder Monats (Groß-/Kleinschreibung wird
nicht beachtet). Bereiche oder Listen sind mit Namen nicht erlaubt.


4) Beispiele:


Diese Zeile startet das Script " /tmp/crontest.sh" jeden Monat am 15. um 4:30 Uhr:
30 4 15 * * /tmp/crontest.sh

Diese Zeile startet das Script " /tmp/crontest.sh" an jedem beliebigen Tag um 8, 12 und 21 Uhr.
0 8,12,21 * * * /tmp/crontest.sh

Der Job wird alle 10 Minuten ausgeführt
*/10 * * * * /tmp/crontest.sh

Wird am ersten Tag jedes Monats um 12:00 Uhr ausgeführt
0 12 1 * * /tmp/crontest.sh

Kommando wird täglich um 6:00 Uhr und um 18:00 Uhr mit root-Rechten aufgerufen
0 6,18 * * * root /tmp/crontest.sh

Läuft täglich von Januar bis Juni um 18:30 Uhr
30 18 * 1-6 * /tmp/crontest.sh

Ein Job, der jeden Dienstag und Donnerstag um 12 Uhr ausgeführt werden soll:
00 12 * * 2,4 myjob

Ein Job, der zu jeder Stunde von 6 bis 18 Uhr ausgeführt werden soll:
00 6-18 * * * myjob

Ein Job der innerhalb dieses Zeitraums nur jede zweite Stunde ausgeführt werden soll:
00 6-18/2 * * * myjob

Alle 5 Minuten einen Ping auf eine Internetadresse:
*/5 * * * * ping -c 1 www.fibel.org &> /dev/null

Eine Besonderheit ist die Angabe des Tages. Hier stehen zwei Möglichkeiten zur Verfügung. Sie können den Tag des Monats und den Wochentag angeben. Werden beide Informationen angegeben, dann wird der Job zu dem Zeitpunkt ausgeführt wenn mindestens eine von den Angaben zutrifft. Der folgende Befehl wird also nicht nur am Freitag, den 13. ausgeführt, sondern er wird an jedem 13. Tag des Monats und an jedem Freitag ausgeführt.
00 12 13 * 5 freitag_der_13.sh



5) Email deaktivieren

Standardmäßig schickt Chron eine Mail an den User unter dessen Kontext das Script ausgeführt wird.
Um da zu unterbinden lenkt man die Ausgabe des Scriptes nach /dev/null (den Mülleimer) um.

30 18 * * * rm /home/tmp/* > /dev/null 2>&1


6) Email an einen bestimmten User schicken

Durch eintragen der "MAILTO" Zeile im Kopf der /etc/crontab werden alle Ausgaben die die Scripte generieren an den dort angegebenen User geschickt.

MAILTO=yourusername@yourdomain.com
30 18 * 1-6 * /tmp/crontest.sh


7) Ein Logfile erzeugen:

30 18 * * * rm /home/tmp/* > /var/log/clean_tmp_dir.log


8) Rechtevergabe für Cronjobs:

"Crontab" kann nur aufgeführt werden, wenn der jeweilige in der /etc/cron.allow steht.
Wenn das /etc/cron.allow File nicht existiert, kann man "Crontab" ausführen, wenn der jeweilige User nicht in der /etc/cron.deny steht.
Wenn nur die /etc/cron.deny existiert, und niemand steht drinnen, dann kann nur "root" crontab ausführen.

9) Den Cron Deamon neu starten:

rccron restart

 

(c) Juergen Schilling 01.07.2009