Posts tagged ‘cronjob’

Linux Zeitsynchronisation – sanfte Angleichung mit chrony

Quelle: Wikimedia

Quelle: Wikimedia

Chrony gleicht die Systemzeit Schritt für Schritt an, nicht auf einen Schlag!
Die Systemzeit aktuell zu halten ist gerade bei Servern sehr wichtig! Die Gründe dafür habe ich ja bereits in meinem Artikel über den NTP Server beschrieben:

Viele Webserver (oder Rootserver) sind auf eine genau laufende Uhrzeit angewiesen, um aussagefähige Logfiles (Beispielsweise Zugriffsstatistika der Webseiten oder Systemlogfiles für die Fehleranalyse) schreiben zu können. Leider laufen die Systemuhren (Hardwareclock) nicht sehr genau und haben bereits nach einigen Wochen relativ grosse Abweichungen zu verzeichnen. Vergisst man gelegentlich die Uhr/Zeit zu stellen, kann man sich da schon einige Unschönheiten einfangen.

Leider hat der NTP Daemon einen unschönen Nachteil – bei Zeitdifferenzen aktualisiert er die Uhrzeit auf einen Schlag! Das mag meist keine Auswirkungen haben, jedoch wird es dann haarig, wenn man auf ein von der Zeit her sauberes Logfile angewiesen ist. Oder Cronjobs nun durch den “Zeitsprung” evtl. übersprungen werden, eben weil die Zeit auf einen Schlag korrigiert wurde, sei es auch nur ein 1min Sprung. Hier kann chrony Abhilfe schaffen. Chrony arbeitet lokal auf dem aktuell zu haltendem Server / System und passt bei Zeitdifferenzen zu den eingetragenen NTP Zeitserver Quellen die Zeit Stück für Stück sanft an. Logfiles sind so zumindest im chronologischem Ablauf wieder nachvollziehbar, Zeitgesteuerte Aufgaben, also Cronjobs, werden keinesfalls übergangen.

Für meinen Webserver habe ich mich jedenfalls für Chrony entschieden und meinen lokalen NTP Server deaktiviert – eben weil ich keinesfalls meine Backupjobs übersprungen wissen möchte. Chrony ist in den Repositorys von Debian und Ubuntu enthalten und lässt sich auf diesen Systemen entsprechend einfach auch installieren:

aptitude install chrony

Die Konfiguration von Chrony liegt unter /etc/chrony/chrony.cfg – hier brauch man, sofern man die Liste der Referenzzeitserver nicht anpassen möchte, nichts mehr dran machen, da passt eigentlich alles schon gut zusammen. Fehlt also nur noch:

/etc/init.d/chrony start

Fertig, die Zeitsynchronisation eures Debian Linux (oder welches Derivat ihr habt) sollte nun problemlos und dauerhaft laufen!

Weitere Links zum Thema:

Debian: Cronjob HowTo – Eine kleine Hilfestellung

Cron - zeitgesteuerte Ausführung von Befehlen und ScriptsUm einen zeitgesteuerten Aufruf / Start eines Scriptes oder Programmes unter Linux auszulösen (unter Linux heisst dies dann cronjob), bedint man sich der Crontab (so heißt im übrigen auch das Programm welches diese Crontabeinträge nachher abarbeitet). Jeder User hat so eine, mit die Wichtigste ist jene, welche sich unter /etc/crontab befindet. Hier schreibe ich fast alle Cronjob´s rein die auf meinem System laufen sollen, also genau solche Jobs wie SQL Datenbankdumps, Datensicherungen, Dienstneustarts, Benachrichtigungsscripts über Systemupdates, etc.

# m h dom mon dow user  command
17 *    * * *   root    /usr/local/cronjob1.sh
25 6    * * *   root    /usr/local/cronjob2.sh

Oben habe ich mal die ersten 3 Zeilen aus meiner Crontab eingestellt… Wie man erkennen kann, teil sich jeder Eintrag / Cronjob für eine Aufgabe in viele Spalten. In dem erstem 5 Spaltigen Bereich, welcher die Zeiten steuert, zu denen der Cronjob ausgeführt werden soll, stehen zuerst die Minute(n), dann die Stunde(n), der Tag, der Monat und der Wochentag. In der nächsten Spalte steht der Benutzer unter dem der Cronjob ausgeführt werden soll, gefolgt von dem Aufruf des zu startenden Programmes inklusive aller Optionen.

Die Crontab eines normalen Benutzers sieht etwas anders aus

# m h dom mon dow command
17 *    * * *   /usr/local/meinscript --optionen

Quasi das Gleiche, jedoch ohne die Spalte vom Benutzer / User, da normale Benutzer nur unter ihrem eigenem Namen Cronjob´s starten dürfen. Auch editiert der Benutzer seine Crontab nicht mit der /etc/crontab, sondern mit dem Kommando “crontab -e”. Ansehen kann man sich seine Cronjob´s mittels “crontab -l”. Dieser Weg ist dem meinem auch eindeutig zu bevorzugen!

Um diesen doch sehr gewöhnungsbedürftigen Sytax mal zu erklären, ein paar Beispiele dazu:

Um ein Script zum Beispiel jede Minute auszuführen müsste der Cronjob wie folgt aussehen:

* * * * *   /usr/local/meinscript --optionen

Wenn das Script alle 15 Minuten laufen soll, also zu jeder 15ten Minute und jeder Stunde, sähe der Cronjob so aus:

*/15 * * * *   /usr/local/meinscript --optionen

Cronjob für ein Script welches genau jeden morgen um 06:00 Uhr ausgeführt werden soll:

0 6 * * *   /usr/local/meinscript --optionen

Cronjob um ein Script jeden morgen zwischen 6 Uhr und 9 Uhr alle 15 Minuten zu starten:

*/15 6-9 * * *   /usr/local/meinscript --optionen

Cronjob f+r ein Script das genau am Heiligabend um 18 Uhr laufen soll:

0 18 24 12 *   /usr/local/meinscript --optionen

Cronjob für ein Scriptdas welches jeden Montag morgen laufen soll:

* * * * 1   /usr/local/meinscript --optionen

Beim letztem Beispiel wird der Wochentag als Zahl angegeben. Gültig hierfür sind die Zahlen 0-7, wobei die 0 und die 7 für den Sonntag stehen – Bitte nicht verzählen!