| Linux bietet sehr flexible Möglichkeiten zur Arbeit mit Datum und Zeit. | Eine spezielle Aufgabe ist die automatische Auslösung von Jobs zu vorbestimmten Zeiten. |
Linux
|
Das professionelle OpenSource Betriebssystem |
LAMP
|
Standard-Server mit Linux - Apache - MySQL - PHP - Samba |
| Ausgabe | von Datum und Zeit |
| Eingabe | von Datum und Zeit |
| Kalender | Mini-Anzeige des aktuellen Monats-Kalenders |
| Script | Definition des Jobs in einem Script |
| Einmalig | Einmalige Ausführung zu einer vorbestimmten Zeit - at |
| Zugangsrechte zum at-Befehl für alle (zugelassenen) user | |
| Wiederholt | Periodisch wiederholte Ausführung - cron |
| Persönliche crontab für alle (zugelassenen) User | |
| Zeitzone | Eingabe, Ausgabe und Umgebungs-Variable |
| Jiffy | Interne Verwaltung der Systemzeit mit Interrupts |
| Verwandte Themen: | |
| Kalender & Zeit | Spezielle Aspekte der Informationstechnik |
| Windows & Zeit | Zeit-Steuerung auf Windows (+ Cygwin) |
| NTP-Server | Network Time Protocol zur Zeit-Synchronisation |
| UNIX-Timestamp | Zeitmarke zur Speicherung von Datum und Zeit |
| Linux-Umgebung | Umgebungs-Variable: Analyse, Definition, Änderung |
Ausgabe von Datum und Zeit |
|
Hardware-UhrJeder gängige PC verfügt über (mindestens) 2 verschiedene Uhren:► Die Hardware-Uhr läuft auf einem eigenen, dafür spezialisierten Chip. Sie dient zur Überbrückung des abgeschalteten (stromlosen) Zustands, benötigt sehr wenig Energie und wird aus Akkus und/oder langlebigen Batterien gespeist. |
Software-UhrDiese Uhr ist ein kleines Programm, das vom Betriebssystem periodisch aufgerufen wird. Die Uhr wird beim System-Start mit der Hardware-Uhr synchronisiert.► Alle 'normalen' Zeit-Anfragen werden an diese Uhr gerichtet. Die Software-Uhr läuft oft genauer als die Hardware-Uhr, da sie u.a. auch Abweichungen kompensieren kann. |
Datum und Zeit lesenSie können System-Datum und Zeit auf der Konsole ausgeben und dazu viele verschiedene Formate verwenden.Hier wird jeweils der Befehl und anschließend sein Ergebnis gezeigt (ohne Gewähr !) ♦ Details zeigen die Konsolen-Befehle
# man date
# info date ► Datum und Lokalzeit ohne Argument im Format RFC822 mit Text-Angabe der Zeitzone.
# date
Day Mon 01 12:34:56 CET 2000
|
►
Standard
→ ISO 8601
Format: Datum oder Variante mit Zeit und Offset (Abstand von der Weltzeit UTC)
# date --iso-8601
2000-01-01
# date --iso-8601='seconds'
2000-01-01T12:34:56+0100
► Format RFC-822: Weltzeit UTC oder Lokalzeit und Offset (Abstand von der Weltzeit UTC)
# date --utc
Day Mon 01 11:34:56 UTC 2000
# date --rfc-822
Day, 01 Mon 2000 12:34:56 +0100
|
Formatierung mit POSIX-Funktion strftimeDatum und Zeit können mit Hilfe eines Format-Strings fast beliebig formatiert werden. Der String wird nach dem POSIX-Standard (Funktion strftime ) formuliert:► UNIX-Timestamp (Sekunden seit 1970-01-01 ):
# date "+%s"
1234567890
► Zeitzone - Name und Offset (Abstand von der Weltzeit UTC) in Stunden (2 verschiedene Formate)
# date "+%Z %z %:z"
Das gibt u.a. die Möglichkeit, mit Programmen beliebiger Programmiersprachen
die aktuelle Differenz Zonenzeit-Weltzeit festzustellen.CET +0100 +01:00
♦ Hilfe und Details mit
# man date
# info date |
Ausgabe im Standard-Format
→
ISO 8601: ► Standard Datum und Zeit
# date "+%F %T"
► Datum
2000-01-01 12:34:56
# date "+%F"
► Zeit
# date "+%Y-%m-%d" 2000-01-01
# date "+%T"
►
Wochentags-Nummer
(Mo→1..So→7)
# date "+%H:%M:%S" 12:34:56
# date "+%u"
►
Tag des Jahres
0
# date "+%Y-%j"
2000-123
|
|
Das kleine Script rechts zeigt die Weiter-Verarbeitung
der date-Daten An eine Text-Datei ausgeben (1.Zeile), an eine Text-Datei anhängen (2. Zeile), oder an eine Variable übergeben (3.Zeile): In diesem Beispiel wird ein neues Verzeichnis mit einem "programmiertem Namen" erzeugt. Mit "double quotes" wird der String selbst an eine Variable zugewiesen, mit `backticks` das Ergebnis des (date)-Befehls. |
# date "+%Y%m%d%H%M%S" > test.txt
würde jetzt dieses Verzeichnis erzeugen
# date "+%Y%m%d%H%M%S" >> test.txt # var1 = `date"+%Y%m%d%H%M"` # echo "var1 = $var1" # mkdir /home/test/d$var1 /home/test/d_20000101123456
|
PauseDie Anweisung pause hält ein → Shell-Script-Programm für die als Argument angegebene Anzahl von Sekunden an. Man kann sie u.a. dazu verwenden, um nach einer Anweisung die Ausführung abzuwarten (z.B. Start oder Stop eines Server-Programms) und danach die Wirkung anzuzeigen. |
Demo-Programm, z.B. als Text-Datei pause.sh
#!/bin/sh
date "+%F %T"pause 3 date "+%F %T" |
Hardware-UhrLinux erlaubt auch die direkte Ablesung der Hardware-Uhr eines PC mit dem Befehl hwclockDas Beispiel zeigt die Ausgabe in Lokalzeit und in Weltzeit UTC im chaotischen RFC-Format. Zuletzt werden die Sekunden-Bruchteile angegeben. Details zum Befehl hwclock erhalten sie mit # man hwclock
|
Anzeige der Hardware-Uhr:
# hwclock --show
Day Mon 01 12:34:56 2000 -0.123 seconds
# hwclock --show --utc
Day Mon 01 11:34:58 2000 -0.567 seconds
|
Dokumentation auf Linux(Navigation mit den Pfeil-Tasten, Ende mit Taste q )
# man date
# info coreutils 'date invocation' |
Cygwin bietet die Möglichkeit, die professionellen Linux Shell-Programme
auch auf Windows zu verwenden.Mit Cygwin lassen sich u.a. zahlreiche auf Windows schmerzlich fehlende → Datum & Zeit-Funktionen installieren. |
Eingabe von Datum und Zeit |
|
rootDie Einstellung der Systemzeit erfordert Administrator-Rechte. |
Sie müssen normalerweise als root angemeldet sein, um diese Befehle auszuführen. |
|
Meist müssen sie - wenn überhaupt - nur die Zeit einstellen: Verwenden sie dazu solche Strings, je nach Genauigkeit: set=hh:mi:ss
Die Änderung von Datum und Zeit auf Linux erfordert die entsprechenden
Zugriffsrechte ! (normalerweise root )
|
Einstellung der Zeit (Stunden, +Minuten, +Sekunden):
# date --set=12
# date --set=12:34 # date --set=12:34:56 |
|
Zur Eingabe des Datums verwenden sie ein anderes Format:
MODDhhmi
Das chaotische Format richtet sich nach der Häufigkeit der verwendeten Daten:
Meist genügt die erste Version.
MODDhhmiYYYY MODDhhmiYYYY.ss |
Einstellung von Datum
# date 01011234
# date 010112342000 # date 010112342000.56 |
Hardware-UhrLinux erlaubt auch die direkte Einstellung der Hardware-Uhr eines PC mit dem Befehl hwclock - Das wird allerdings nicht empfohlen ! Besser als eine einmalige manuelle Einstellung ist die regelmäßige automatisch Aktualisierung mit → NTP.► So wird die Software-Uhr (bei Systemstart) automatisch von der Hardware-Uhr synchronisiert (Lesen sie vorher das Manual !) # hwclock --hctosys
► Manuelle Einstellung: Setzen sie mit Befehl date die Software-Systemzeit, kontrollieren sie diese, synchronisieren sie danach die Hardware-Uhr mit # hwclock --systohc
► Die Hardware-Uhr kann in der Weltzeit UTC geführt werden, unabhängig von der Einstellung von Zeitzone und Software-Uhr. Details zum Befehl hwclock liefert. (Navigation mit den Pfeil-Tasten, Ende mit Taste q )
# man hwclock
# man date # info coreutils 'date invocation' |
Das Betriebssystem verwendet selbst das Programm hwclock,
um die (Software)-Systemzeit nach dem Hochfahren auf die Hardware-Uhr einzustellen.
Dazu wird dieses Script verwendet
/etc/sysconfig/clock
►
Änderungen dieser Datei sind nicht sinnvoll, da System-Scripts bei Änderung
der Software-Installation oder bei einem System-Update überschrieben werden.► Eigene Scripts erstellen sie besser in einem anderen Verzeichnis. ► Beachten sie die Optionen zur Synchronisation: Wenn die Software-Uhr genauer läuft, dann wird die Hardware-Uhr beim Herunterfahren des Systems (shutdown) mit der Software-Uhr synchronisiert. ► Server laufen lange Zeit ungestört. In diesem Fall treten die Ereignisse System-Start und System-Stop zu selten auf. Server werden daher periodisch (z.B. täglich) mit → NTP mit einem externen Zeitserver synchronisiert. |
Konfiguration der UhrIn diesem Pfad befindet sich (bei SuSE Linux) eine Text-Datei zur Konfiguration der System-Uhr:/etc/sysconfig/clock
|
Die Datei ist mit Kommentaren gut dokumentiert. Die Standard-Konfiguration ist sinnvoll und sollte nur dann geändert werden, wenn wichtige Argumente dafür sprechen. |
Definition eines Jobs durch ein Script |
|
|
Wenn sie planen, einen Job zeitgesteuert zu starten, dann erstellen sie dafür
am besten ein eigenes Script: Beispiel: In der Textdatei (Muster rechts) /home/test/testjob
wird ein Job definiert: Damit wird zur Ausführungszeit ein Verzeichnis
des Namens
/home/test/testYYYYMMDDhhmm
erstellt, in dessen Name Datum und Zeit enthalten sind - so ist leicht zu
kontrollieren, ob und wann der Job tatsächlich ausgeführt wurde.
|
Inhalt der Text-Datei /home/test/testjob.sh #!bin/sh
var1 = `date"+%Y%m%d%H%M"`# file hone/test/testjob.sh mkdir /home/test/d$var1 # eof testjob
|
Manueller TestTesten und Debuggen sie ihr Script durch manuellen Start. Verwenden sie nur absolute Pfade für Verzeichnisse und Dateien. |
Manueller Start des Scripts an der Shell-Konsole:
# /home/test/testjob.sh
|
Test mit cronTesten sie, ob ihr Script auch beim automatischem Start funktioniert - In diesem Fall stehen nur wenige → Umgebungs-Variable zur Verfügung.Mit der gezeigten Auftrags-Zeile wird zu jeder vollen Stunde das Script-Programm testjob.sh im Namen und mit den Rechten des Administrators root gestartet. ♦ Details zum Cron-Server und zu Umgebungs-Variablen (Analyse, Simulation, Ergänzung) |
Datei /etc/crontab Neue Text-Zeile anhängen: 0 */1 *
* * root /home/test/testjob.sh
|
Einmalige Ausführung zu einer vorbestimmten Zeit - at |
|
at-DemonZunächst muss sichergestellt werden, dass der at-Demon läuft:Falls der Demon (Server, Dienstprogramm) nicht läuft, wird er gestartet: SuSE bietet dazu das hier gezeigte Script /etc/init.d/atd
Das Programm selbst liegt (z.B.) hier
/usr/sbin/atd
Dokumentation:
# man atd
Eine Frage nach dem status oder die Wiederholung der
Prozessliste zeigt den Erfolg des Startbefehls.
|
Manuelle Kontrolle (und Start) des at-Demon
# ps -A | grep atd
... # /etc/init.d/at start # /etc/init.d/at status ... # ps -A | grep atd |
AufträgeJobs müssen vor Beauftragung des atd als → Scripts formuliert werden !Der at-Demon erhält seine Aufträge meist direkt von der Konsole: Standard-Variante: ohne Datum gilt der aktuelle oder der nächste Tag. Variante mit Datum: Geben sie zuerst die Zeit, dann das Datum (MM/DD/YY oder DD.MM.YY) an. Für die absolute und relative Angabe von Datum und Zeit sind zahlreiche (englische) Abkürzungen möglich (Hilfe mit man at ) Schließen sie die Jobliste mit <Strg>-d. (erzeugt <EOT> ) Nach Abschluss wird die Liste der soeben beauftragten Jobs (mit laufender at-Jobnummer) ausgegeben. |
Auftrag ohne Datum:
# at 12:34
Auftrag mit Datum:
Warning: commands will be executed using bin/sh at> /home/test/testjob1 at> <EOT> job 1 at 2004-05-06 12:34
# at 12:34 12.03.04
Warning: commands will be executed using bin/sh at> /home/test/testjob2 at> <EOT> job 2 at 2004-03-04 12:34 |
|
Eine Liste aller wartenden Jobs erhalten Sie
mit atq. In der ersten Spalte wird die laufende at-Jobnummer angeführt. |
# atq
1 2004-05-06 12:34 root 2 2004-05-06 12:34 root |
| Anweisung atrm (at remove) löscht einen Job aus der Warteliste. Geben sie dazu die at-Jobnummer an (z.B. aus der atq-Liste). Eine nachfolgende Kontrolle mit atq zeigt den Erfolg des Befehls. |
# atrm 2
# atq 1 2004-05-06 12:34 root |
"Wenn Zeit dafür ist": batchBefehl batch beauftragt einen Job zur Ausführung, sobald die Systemlast <80% beträgt. (Eine andere Auslastung kann definiert werden). |
# batch
Warning: commands will be executed using bin/sh at> /home/test/testjob at> <EOT> job 3 at 2004-03-04 12:34 |
| ♣ Der at-Befehl steht nur dem User root immer zur Verfügung. | Die Zugangsrechte für ↓ alle anderen berechtigten User werden getrennt eingestellt. |
at für berechtigte User |
|
|
●
Alle unter at
genannten Möglichkeiten zur Steuerung stehen nur
dem root-Administrator immer zur Verfügung. ● Die Rechte für den at-Befehl werden durch die Dateien at.allow oder at.deny geregelt. ● Tragen sie in diese Dateien user-Namen ein, und zwar 1 je Zeile. ► Wenn at.allow existiert, dann muss jeder user darin eingetragen sein, um at zu benutzen. ► Wenn at.allow nicht existiert, jedoch at.deny, dann dürfen alle user at benutzen, die nicht in at.deny eingetragen sind. ► Wenn weder at.allow noch at.deny existiert, hat nur root Zugriff auf at. |
Konfiguration der at-Rechte:
/etc/at.allow
/etc/at.deny |
Periodisch wiederholte Ausführung - cron |
|
| Der cron-Demon (Server) ist in jeder Linux-Distribution installiert und gestartet. Er kontrolliert in jeder Minute einmal, ob auszuführende Jobs vorliegen. | Es gibt verschiedene Möglichkeiten, einen cron-Job in Auftrag zu geben: |
System-crontab● In der Datei /etc/crontab sind die cron-Jobs des Betriebssystems nach einer speziellen Syntax gelistet. Diese Datei darf nur durch den SuperUser root beschreibbar sein.● Hier sind normalerweise einige Systemjobs eingetragen, die man besser nicht verändert. In der Zeile # Syntax finden sie die 'Grammatik' eigener Einträge (die am besten am Ende der Datei angefügt werden): ● Die Reihenfolge der Datum- und Zeit-Angaben ist gewöhnungsbedürftig: Je ein Eintrag für Minuten (0..59), Stunden (0..23), Tag (des Monats, 1..31), Monat (1..12), → Wochentag (0→So..6→Sa), User und Befehl; Als Trennzeichen dienen blank (Leerzeichen) oder tab (Tabulator). Der * Stern ist ein Joker für alle Werte. ● Man muss alle Teile der Befehlszeile angeben und darf nichts weglassen. ● cron reagiert sofort (nach max 1 min) auf jede Änderung der crontab, und braucht nicht neu gestartet werden. ● # Kommentare nur in eigene Zeilen ! |
Muster der Text-Datei crontab:
# file /etc/crontab # ... # Syntax: min std tag monat wotag user befehl # täglich zu jeder vollen Stunde 0 * * * * root /home/ich/test # täglich von 09:30 bis 16:30 zu jeder halben Stunde
30 9-16 * * * root /home/test/testjob
# an jedem Monatsersten um 08:15
15 8 1 * * root /home/ich/test
# an jedem Freitag, 13. um 13:13
13 13 13 * 5 root /home/test/testjob
# heute um 09:00, 12:00 und 15:00
0 9,12,15 25 3 * root /home/ich/test
# am 24.Dezember um 12:34
34 12 24 12 * root /home/ich/test |
cron-Verzeichnisse● Der cron-Demon durchsucht automatisch die rechts angezeigten Verzeichnisse und führt alle darin enthaltenen Scripts aus. Wenn sie ein Script z.B. nach /etc/cron.daily kopieren, dann wird es "täglich" einmal automatisch ausgeführt, normalerweise ca. 15 Minuten nach System-Start (↓ konfigurierbar). In diesem Fall wird der Job nicht in /etc/crontab eingetragen.● cron reagiert sofort auf jede Änderung im Inhalt der cron-Verzeichnisse. ● Es ist übersichtlicher, wenn es von einem Programm nur eine einzige "gültige" Kopie gibt. Daher legt man im cron-Verzeichnis keine zusätzliche Kopie an, sondern besser einen Link (Alias, Verweis) auf das Original. |
/etc/cron.hourly/
/etc/cron.daily/ /etc/cron.weekly/ /etc/cron.monthly/ cron-Link zu einem Script-Programm anlegen: # ln -s /home/ich/test.pl /etc/cron.daily/ich_test
|
Ausführungs-RechteJe nach Konfiguration gelten unterschiedliche Regeln für die Zulassung eines cron-Jobs:• Wenn die Datei cron.allow existiert, dann muss der eingetragene User darin ausdrücklich angeführt werden. • Wenn die Datei cron.deny existiert, dann darf der User darin nicht eingetragen sein. • Wenn keine der beiden Dateien existiert, dann darf nur der SuperUser root den Job ausführen. |
Wenn mit cron ein Script-Programm ausgeführt werden soll, dann muss der angegebene User natürlich auch das Recht dazu haben bzw. muss das Programm als executable markiert sein. |
cron.d Verzeichnis● Der cron-Demon durchsucht auch dieses Verzeichnis, erwartet darin jedoch keine ausführbaren Scripts, sondern weitere Steuerdateien, in welchen cron-Jobs nach der oben erwähnten crontab-Syntax eingetragen sind. |
/etc/cron.d/
|
Umgebung● Wenn ein Programm mit cron gestartet wird, erhält es aus Sicherheits-Gründen nur wenige → Umgebungs-Variable - viel weniger als bei manuellem Start an einer Konsole.Das führt oft zu Problemen. ● Ein mit cron gestartetes Programm sollte normalerweise keinen Ausgabe-Text an die Konsole senden. Daher ist es schwierig, allfällige (in diesem Fall: häufige) Fehler zu finden und zu beheben. |
● Es ist für wenig geübte EntwicklerInnen besonders schwierig, Programme herzustellen, die sich mit cron automatisch starten lassen.
Auf der Seite → Linux
Umgebungs-Daten werden dazu Beispiele, Test-Programme und Tipps vorgestellt.
|
System-VorgabenIn diesem Pfad befindet sich (bei SuSE Linux) eine Text-Datei zur cron-Konfiguration:/etc/sysconfig/cron
Die Datei ist mit Kommentaren gut dokumentiert. Die Standard-Konfiguration ist sinnvoll und sollte nur dann geändert werden, wenn wichtige Argumente dafür sprechen. |
Alternativenanachron und fchron bieten Ergänzungen bzw. Erweiterungen, insbesondere für Arbeits-PC, die täglich ein- und ausgeschaltet werden: Sie holen diverse Routine-Aufgaben nach dem Hochfahren nach. |
Server-RettungServer-PC befinden sich oft in entfernten, versperrten Räumen und sind dann schwer zugänglich. Wenn ein derartiger Server außer Kontrolle gerät, dann ist es vorteilhaft, eine Möglichkeit zur Reparatur auch ohne direkten Zugang zu haben.Die Voraussetzungen dazu sind meistens erfüllt:: • Das Server-Betriebssystem läuft noch und ist nicht abgestürzt • Der Cron-Dienst funktioniert. • Mindestens einer dieser Dienste funktioniert, mit dem sich eine Datei auf den Server kopieren lässt: SSH, FTP, Fileserver (NFS, Samba). |
Mit etwas Glück ist es möglich, ein kleines Script-Programm auf den Server zu kopieren, mit dessen Hilfe der PC mindestens so weit gebracht wird, dass eine Reparatur wieder möglich ist: Der Cron-Dienst wird bei der Vorbereitung angewiesen, ein bestimmtes Script zu fixen Zeiten (z.B. täglich um Mitternacht) asuzuführen. Unter normalen Umständen enthält dieses Script keine Anweisungen. Im Notfall kann man es durch ein Script ersetzen, welches die gewünschten Anweisungen enthält, z.B. zum Beenden bestimmter Prozesse oder für einen Neustart des Servers. |
Persönliche crontab für berechtigte User |
|
crontab-Berechtigung:● Alle unter cron genannten Möglichkeiten zur Steuerung stehen nur dem root-Administrator zur Verfügung.● Die Rechte für den crontab-Befehl werden durch die Dateien allow oder deny geregelt (in anderen Versionen cron.allow und cron.deny). ● Tragen sie in diese Dateien user-Namen ein, und zwar 1 je Zeile. ► Wenn allow existiert, dann muss jeder user darin eingetragen sein, um crontab zu benutzen. ► Wenn allow nicht existiert, jedoch deny, dann dürfen alle user crontab benutzen, die nicht in deny eingetragen sind. ► Wenn weder allow noch deny existiert, hat nur root Zugriff auf cron. |
Je nach Version werden verschiedene Dateien verwendet:
/var/spool/cron/allow
oder
/var/spool/cron/deny
/var/spool/cron.allow
Die Dateien der user-crontabs werden normalerweise
ebenfalls hier gespeichert.
/var/spool/cron.deny |
crontab-Befehl:Wenn ein user die ↑ crontab-Berechtigung hat, dann kann sie/er den Befehl verwenden und damit eine eigene persönliche crontab-Tabelle verwalten.● Mit Option (-l) wird die persönliche crontab-Liste angezeigt. ● Mit Option (-e) wird eine neue persönliche crontab erstellt oder eine bestehende editiert. Dazu wird meist der Editorvibenutzt (siehe unten). ● Die Syntax ist gleich wie oben für die System-crontab beschrieben, jedoch ohne das user-Feld. ● Beim Speichern wird die Syntax überprüft: Bei Fehler erhalten sie eine Meldung und können nochmals editieren. Nur wenn die Syntax ok ist, wird die crontab gespeichert. Testen sie anschließend durch Anzeige der crontab mit (-l). ● Option (-r) löscht eine crontab |
Deteils erhält man mit dem Konsolen-Befehl # man crontab
Anzeige der persönlichen crontab (alle user) bzw.Anzeige einer user-crontab (nur root):
# crontab -l
Erstellen / Editieren einer persönlichen crontab:
# crontab -u username -l # crontab -e
Löschen der persönlichen crontab
# crontab -r
|
Der Text-Editor vistammt noch aus der Konsolen-Zeit und ist für BenutzerInnen heute üblicher Editoren ungewohnt.Hier eine Mikro-Anleitung nur für die Erstellung der crontab: ● Sie sehen anfangs eine "leere" Datei. ● Anweisung :i wechselt in den INSERT-Mode (wird unten angezeigt. ● Im INSERT-Mode kann man Text eingeben, dort funktioniert auch die Löschtaste. Bereits gespeicherten Text (:w) ändert man entweder durch ein neues INSERT oder durch Löschen (:x.). ● Mit den Pfeiltasten kann man navigieren. ● Mit esc-Taste gelangt man in den Befehls-Mode (und wieder zurück) ● Befehl :w oder :write speichert die Datei ● Befehl :help öffnet das Hilfe-Fenster, das man mit Befehl :q wieder verlassen kann. ● Befehl :x löscht ein Zeichen (nach rechts), :nx löscht n Zeichen, z.B. :3x löscht 3 Zeichen rechts vom Cursor. ● Befehl :q oder :quit beendet den Editor. |
Manual von vi: # man vi
oder bei gestartetem vi: <F1>oder im Befehlsmodus :help Erstellen / Editieren einer persönlichen crontab: # crontab -e
Beispiel für vi-Befehle:
i
0 12 * * * /home/test/testjob1 0 9 1 * * /home/test/testjob2 esc :w :q |
Zeitzone |
|
| Die System-Zeitzone wird schon bei Installation eingestellt. Je nach System und Version kann man sie nachträglich ändern. | Auf SuSE-Linux erfolgt diese Einstellung mit YAST | System | Datum und Zeit. Debian-Linux (Ubuntu) bietet dazu das Programm tzsetup |
Zeitzonen-DatenbankLinux-Systeme enthalten Zeitzonen-Daten (die 'Olson Timezone Database') im Verzeichnis/usr/share/zoneinfo
►
Die Unter-Verzeichnisse (z.B. Europe ) entsprechen der
Region. In jedem Regions-Verzeichnis befinden sich Binär-Dateien mit den
Daten einer Stadt (z.B. Berlin, Vienna, Zurich ).Die Dateien enthalten u.a. Angaben zu timezone-offset (Differenz zur Weltzeit in Stunden), zur Sommerzeit und zur Geschichte (historische Änderungen von timezone-offset und Sommerzeit-Regeln). ► Die Angabe der Zeitzone erfolgt in der Form Region/Stadt Dieser Text wird von Programmen dazu verwendet, die gesuchten Zeitzonen-Daten aus der betreffenden Datei zu lesen (Lookup). |
Beispiele: Mitteleuropäische Zeit wird z.B. gesetzt mit Europe/Berlin, Europe/Zurich, Europe/Vienna, Osteuropäische Zeit mit Europe/Athens oder Westeuropäische Zeit (im Winter-Halbjahr = Weltzeit) mit Europe/London In manchen Systemen ist für Europe/Zurich alternativ oder zusätzlich Europe/Bern angegeben. ► Die Zeitzone des Systems wird hier festgelegt: /etc/localtime
Das Objekt ist entweder die Kopie einer Binärdatei aus der Zeitzonen-Datenbank
oder ein Link dorthin, z.B.
ln -sf ../usr/share/zoneinfo/Europe/Vienna /etc/localtime
|
Anzeige mit dateMit Befehl date und Format-String %z wird der Offset der am System eingestellten Zeitzone (Abstand zur Weltzeit UTC) in Stunden angegeben. Das Ergebnis ist für Mitteleuropäische Zeit (CET, MEZ) +0100 oder bei Sommerzeit +0200Verwenden sie im Zweifel immer die Angabe des timezone-offset: Sie ist weltweit eindeutig und im Gegensatz zum Namen der Zeitzone unmissverständlich. |
Ausgabe des Timezone Offset in Stunden
# date "+%z"
+0100
|
Umgebungs-Variable TZManche Programme (z.B. Apache / PHP) erwarten eine Umgebungs-Variable TZ mit Angabe der Zeitzone in der Form Region/StadtDas Beispiel zeigt, wie eine Umgebungs-Variable einmalig oder dauerhaft gesetzt wird. Mitteleuropäische Zeit wird z.B. gesetzt mit Europe/Berlin, Europe/Vienna, Europe/Zurich, Osteuropäische Zeit mit Europe/Athens oder Westeuropäische Zeit (im Winter-Halbjahr = Weltzeit) mit Europe/London ► Ausgabe der Umgebungs-Variablen TZ mit PHP. So stellen sie fest, ob die Umgebungs-Variable gesetzt und von PHP erkannt wurde: <?php
print 'TZ='.getenv('TZ')."<br />\n";
?>
|
► Beim Hochfahren definiert das System die wichtigsten → Umgebungs-Variablen mit dieser Datei: /etc/profile
Eine Änderung dieser Datei ist jedoch nicht empfehlenswert, da sie bei
Software-Änderungen und bei jedem System-Update überschrieben wird.► Erstellen sie eine eigene Datei /etc/profile.local
und fügen sie am Ende diese Zeile ein:
export TZ="Europe/Vienna"
►
Nach System-Neustart ist TZ für alle Prozesse
verfügbar.♦ Details zu Umgebungs-Variablen |
Umgebungs-Variable TZOHMit Hilfe der Umgebungs-Variablen TZ kann jedes Programm die Zeit-Daten der Zone aus der bezeichneten Datei in /usr/share/zoneinfo lesen.Das ist für einfache Programme allerdings recht aufwändig. Es ist praktischer, wenn das Betriebssystem eine → Umgebungs-Variable TZOH definiert, welche die aktuelle Differenz der LokalZeit zur Weltzeit UTC in Stunden als ganze Zahl angibt: Diese beträgt in Mitteleuropa bei Normalzeit TZOH=1, bei Sommerzeit TZOH=2 Eine Möglichkeit zur Lösung ist die Verwendung von date zur Ausgabe der Lokal-Stunden und UTC-Stunden als 2stellige ganze Zahlen:
# date "+%H"
# date -u "+%H" Die Berechnung der Differenz erfordert mit den Mitteln der Konsole etwas Akrobatik: # echo $(($(date "+%H")-$(date -u "+%H")))
Das funktioniert, ergibt jedoch einen schwer verständlichen Fehler, wenn eine der
beiden Zahlen im Bereich 8..9 liegt: In diesem Fall wird die
führende Null als Ankündigung einer Octal-Zahl verstanden, und in diesem
Zahlen-System gibt es keine Ziffern >7
|
Dezimal-Trick:
# echo $((1$(date "+%H")-1$(date -u "+%H")))
Vor der arithmetischen Rechnung wird je eine Ziffer 1 vorangestellt:
Damit wird immer dezimal gerechnet, und der zusätzliche Wert von +100
fällt bei Berechnung der Differenz weg.• Um TZOH an einem Arbeits-PC aktuell zu halten, genügt es, diese Zeile in die Datei /etc/profile.local einzufügen: declare -x TZOH=$((1$(date "+%H")-1$(date -u "+%H")))
Das ergibt Live diese Anweisung:
declare -x TZOH=2
• Etwas schwieriger ist es diese Umgebungs-Variable an einem Server-PC einzurichten, weil dieser normalerweise längere Zeit (Wochen...Monate) ohne Neustart läuft. ♦ Details und Lösungs-Vorschläge auf der seite zu den Linux Umgebungs-Variablen |
Jiffy |
|
Hardware-UhrJeder moderne PC enthält eine PC-lesbare Uhr als Hardware-Baustein. Es handelt sich um einen quarz-stabilisierten Oszillator mit einem angeschlossenen Zähler zur Frequenz-Teilung. Der Chip wird von einer eigenen Batterie oder einem kleinen Akku versorgt auch läuft auch im abgeschalteten PC weiter. |
Beim System-Start wird die PC-Zeit von der Uhr gelesen und danach hauptsächlich von der Software des Betriebssystems weiter verwaltet. Die ersten PC enthielten allerdings noch keine Uhr: Es war notwendig und selbstverständlich, nach dem PC-Start das aktuelle Datum und die Zeit an der Konsole einzugeben. |
InterruptPC-intern wird die Zeitmessung durch Interrupts gesteuert.● Ein Interrupt ist ein Signal (Interrupt Request, IRQ) auf einer der (Hardware)-Interrupt-Leitungen des Prozessors. • Jeder Interrupt-Leitung ist ein Pointer zugeordnet, welcher auf die Adresse eines im Speicher geladenen Programms zeigt (Interrupt Service Routine ISR oder -Handler). |
• Wenn auf einer Interrupt-Leitung ein Signal eintrifft, dann unterbricht der Prozessor die laufende Arbeit und startet das für die jeweilige Leitung zuständige ↓ Interrupt-Handler Programm. Beispiel: Zur Verwaltung der laufenden Zeit wird durch einen Hardware-Baustein in regelmäßigen Intervallen ein Interrupt ausgelöst. |
Interrupt-Handler Programm(Interrupt Service Routine, ISR)Ein ISR Handler führt jene Arbeiten aus, die als Reaktion auf einen bestimmten (dringenden) Interrupt vorgesehen sind. Dieses Programm muss rasch verfügbar sein und ist daher stets im Speicher geladen. ISR-Programme müssen extrem rasch laufen und sich selbst so bald wie möglich beenden. Sie sind daher in der Maschinensprache (Assembler) des jeweiligen Prozessors verfasst. ■ Vor Beginn der Arbeit speichert (PUSH) das ISR den aktuellen Zustand des Prozessors (den Inhalt der Register) auf dem Stack. (Stack = schneller Zwischen-Speicher jedes Prozessors) |
■ Danach beginnt die für das jeweilige Interrupt-Ereignis Vorgesehene Arbeit. Da Interrupts relativ häufig auftreten und die Arbeit aller anderen AnwenderInnen und Dienst-Programme unterbrechen, werden nur sehr wichtige und dringende Arbeiten ausgeführt, deren Anweisungen sich bereits im Speicher befinden. Wenn umfangreiche Arbeiten notwendig sind, dann startet der ISR-Handler dazu ein 'gewöhnliches' Programm (z.B. von einer Festplatte). Während der Arbeit eines ISR-Handlers wird normalerweise kein weiterer Interrupt der betreffenden Leitung angenommen. Der Timer-Interrupt kontrolliert z.B., ob die Wartezeit (Timeout) für einen wartenden bzw. zu startenden Prozess abgelaufen ist. |
|
■
Nach Abschluss der Arbeit regeneriert
(POP) der ISR-Handler den Zustand des Prozessors,
d.h. er ladet alle Register mit den am Stack gespeicherten Daten. ● Danach setzt der Prozessor seine unterbrochene Arbeit fort. An einem modernen Multiprozesor-System läuft der Vorgang zwar komplizierter ab, jedoch nach dem gleichen Prinzip. |
•
Mehrere Aufgaben für einen ISR-Handler: Man kann die Anzahl der Hardware Interrupt-Leitungen nicht beliebig vergrößern. Deshalb war es schon bald nach Einführung der ersten PC notwendig, an den meisten Leitungen mehrere ISR-Arbeiten zusammenzufassen. Heutige ISR-Handler enthalten daher am Anfang mehrere bedingte Verzweigungen (if()...else). Je nach Situation (Inhalt der Register) verzweigt das Programm zu einer der vorgesehenen Arbeiten. |
JiffyDer Interrupt-Handler führt an jedem PC-System eine Zähler-Variable, die bei jedem Aufruf des Handlers erhöht wird. Der Zähler wird bei System-Start auf =0 gesetzt. Die Zeitspanne zwischen 2 aufeinander folgenden Timer-Interrupts wird Jiffy genannt, die lauifende Anzahl Ticks.Die Dauer eines Jiffy ist von Hardware und System abhängig, bei modernen PC-Systemen meist 1..10ms. Bei lange (Monate) dauerndem Betrieb eines (Server)-PC kann der Jiffy-Zähler überlaufen. Moderne Betriebssysteme enthalten spezielle Vorkehrungen, um das System auch in diesem Fall ungestört weiterzuführen. |
In der Elektronik bezeichnet man damit manchmal die Periodenzeit von Wechselstrom (1/50s, in den USA 1/60s). In Physik und Chemie bezeichnet man damit die Zeit, die Licht im Vakuum benötigt, um (verschiedene) sehr kurze Distanzen zurückzulegen, z.B. den Durchmesser eines Nukleons (Atomkern-Teilchens) |
Linux:► Mit dieser Anweisung an einer Shell-Konsole erhalten sie eine Interrupt-Übersicht in 2 Tabellen:# cat /proc/interrupts
• Tabelle 1, geordnet nach der Nummer der Interrupt-Leitung (1.Spalte). danach je 1 Spalte für jeden Prozessor, zuletzt eine kurze Erklärung. Der Timer läuft normalerweise auf Interrupt Nr. 0 (IRQ0) • Tabelle 2: Eine Liste der bearbeiteten Interrupts. Die Bezeichnung LOC gibt normalerweise die 'Local timer interrupts' an. Die folgenden Spalten zeigen die Aufteilung auf die einzelnen Prozessoren. ► Mit dieser Anweisung erhalten sie einen aufbereiteten Text aus aktueller Zeit und Jiffy-Counter: # uptime
Nach der aktuellen Zeit (US-Version) folgt die Zeit seit dem System-Start
in der üblichen Darstellung hh:mi ► Diese Anweisung zeigt eine Übersicht der User, Prozesse und verwendeten Prozessor-Zeit: # w
Die angezeigte Tabelle enthält u.a. die Zeit der Anmeldung (Login),
die 'untätige' Zeit (Idle), die verwendete Prozessor-Zeit für alle
Programme (JCPU) und für das in Spalte 'What' angegebene Programm (PCPU).
|
WindowsWindows Systeme verwenden in den meisten Fällen INT08 und nachfolgend INT1C (system timer tick) zur Zeitverwaltung. Weiters werden je # nach Version auch INT1A (get/set system time, alarm, ...) und INT4A (user alarm handler) verwendet.Mit dieser Anweisung (ab Windows 2k) erhalten sie eine Tabelle: C:\> net statistics server
Aus der Angabe 'Statistik seit...' kann man zumindest den Start-Zeitpunkt
des Systems entnehmen.Microsoft bietet für ältere Systeme das 45kB kleine Konsolen-Programm uptime.exe, welches die Zeit seit dem System-Start für den aktuellen oder für einen (im Netzwerk) entfernten PC als Text ausgibt. Mit dieser Anweisung (ab Windows XP) erhalten sie einen aufbereiteten Text (alle Daten, nur Uptime):
C:\> systeminfo
C:\> systeminfo | find "Systembetriebszeit" Ab Windows 7 gibt der Taskmanager | Leistung die Uptime an. Suche in HKLM\System nach Begriffen wie 'Clock', 'Echtzeituhr', 'Systemzeitgeber', 'Windows-Zeitgeber' HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib
Zahlreiche Daten der aktuellen System-Leistung HKLM\SYSTEM\CurrentColtrolSet\Servcies\W32Time
Windows-Zeitgeber
|
| Die Live Zeit-Angaben dieser Seite erfolgen mit Hilfe der aktuellen Server-Zeit 00:00:00 | Die Zeit-Differenz ihres PC zum Webserver beträgt +0 Sekunden |
|
Letzte Änderung dieser Seite: 2012-03-10 07:49:14
|