 |
| Programmsteuerung über tdbengine.ini |  |
 |
 |
Jedesmal, wenn tdbengine gestartet wird, liest das Programm zunächst die Datei tdbengine.ini. Über diese Datei wird das Verhalten von tdbengine weitgehend definiert. Die Konfigurationsdatei wird in folgenden Verzeichnissen gesucht:
1. Im Verzeichnis, in dem sich das auszuführende Programm befindet
2. Im Verzeichnis, in dem sich die (ausführbare) tdbengine(.exe) befindet
3. Im Verzeichnis /etc/tdbengine
Auf Windows-Systemen entfällt 3.
tdbengine.ini wird im Format von Windows-Konfigurationsdateien gestaltet, die in einzelnen Abteilungen Zeilen der Form "Schlüssel=Wert" enthält. Die Abteilungen werden durch Begriffe in eckigen Klammern definiert.
Der erste Teil unter der Abteilung [globals] beinhaltet die allgemeinen Einstellungen. Folgende Einträge sind möglich (bitte beachten Sie Groß/Kleinschreibung):
Abschaltung der cgi-Aktivitäten unter der tdbengine
stopcgi=0|1
location=url
Ist stopcgi auf 1 gesetzt, so wird kein CGI-Programm ausgeführt, sondern die unter location angegebene Seite angezeigt. Ist keine location angegeben, so erfolgt die Ausgabe "cgi-execution ist stopped".
Definition des globalen Semaphoren, der verwendet wird, wenn für ein Programm kein eigener Semaphor eingerichtet wird
sema=name
timeout=xxxxx
overrun=url
Der Name darf maximal 64 Zeichen beinhalten. Bevor des CGI-Programm ausgeführt wird, wartet die tdbengine, bis der Semaphor mit dem angegebenen Namen frei wird, um ihn dann seinerseits zu belegen. Derzeit handelt es sich dabei ausschließlich um binäre Semaphoren, sie können also immer nur von einem Prozeß genutzt werden. Ein solcher Semaphor stellt also sicher, daß immer nur ein Prozess gleichzeitig aktiv ist. Das Semaphorenkonzept ersetzt die Netzwerkroutinen der TurboDatenbank. Sollen Datenbanken gleichzeitig mit der Netzwerkversion des VDP (bzw. der TurboDatenbank) genutzt werden, so ist ein spezielle Mehrplatzversion der tdbengine erhältlich.
Hinweis: Die Steuerung über Semaphoren ist wesentlich schneller als das herkömmliche File- und Record-Locking.
Erfolgt die Freigabe nicht innerhalb der durch timeout (Millisekunden) angegeben Zeit, so wird die Ausführung abgebrochen und statt dessen die in overrun angegebene Seite ausgeführt.
Mit dem Namen "nosema" wird gekennzeichnet, daß für das CGI-Programm kein Semaphor eingerichtet wird.
Tip: Reine Datenbank-Abfrage-Systeme wie Lexikon-Suchen etc. benötigen keine Semaphoren. Nur wenn gleichzeitig schreibende Zugriffe auf Datenbestände erfolgen, müssen Semaphoren eingerichtet werden.
Logfile-Führung einschalten
logcgi=0|1
Wird logcgi auf 1 gesetzt, so wird jeder CGI-Aufruf in der Datei cgi.log (im Verzeichnis der tdbengine) protokolliert: Datum und Zeit des Aufrufs, Zeit für die Datenübertragung zum CGI-Programm, Ausführungszeit, Zeit für die Datenübertragung zum Klienten, Name des Programms.
Logfile festlegen
log=<Pfad zum Logfile>
Normalerweise wird das Logfile im gleichen Verzeichnis, in dem sich auch die tdbengine befindet, unter dem Namen "cgi.log" angelegt. Dies kann hiermit überschrieben werden. Damit ist es möglich, dem tdbengine-Verzeichnis restriktive Rechte zu erteilen.
CGI-Puffer definieren
cgibuf=nnnn
Damit eine schlechte(=langsame) Übertragung zu einem Klienten nicht zu überflüssigen Sperren führt, puffert die tdbengine die Ausgaben an den Klienten. nnnn ist die Größe des Puffers in Bytes (Minimum = 1024).
Verzeichnisse festlegen
libpath=Suchpfad
Damit kann man einen Suchpfad eingeben, der verwendet wird, wenn in ein Programm mit USES auf Bibliotheken zugegriffen wird und dabei kein kompletter Pfad angegeben wird. Die einzelnen Komponenten des Suchpfads können mit ";" oder ":" getrennt werden.
semadir=Verzeichnis für Semaphoren
In diesem Verzeichnis werden die Semaphoren als Dateien angelegt. Vorgabe ist .
errorlog=/var/log/tdbengine/error_log
cdmode=1
Mit cdmode=1 in der Abteilung [globals] der tdbengine.ini kann festgelegt werden, dass sämtliche Tabellen im R/O-Modus geöffnet werden, auch wenn im Programm etwas anderes angegeben ist. Textdateien, die zum Schreiben geöffnet werden, werden automatisch zu Ramtexten.
nobreak=0
Default-Werte
Folgende Werte sind voreingestellt, wenn keine tdbengine.ini vorhanden ist oder die entsprechenden Einträge unter [globals] fehlen:
[global]
stopcgi=0
sema=cgi
timeout=10000
logcgi=1
log=<Installationverzeichnis>/log.cgi
semadir=./
libpath=
cgibuf=65535
cdmode=0
errorlog=<Installationverzeichnis>/error.log
Programmbezogenene Einträge
Für jedes Programm kann eine eigene Abteilung definiert werden, deren Einträge dann die unter [globals] überschreiben. Folgende Einträge sind hier zulässig:
stopcgi
location
sema
timeout
overrun
cgibuf
log
Der Name der Abteilung lautet wie der Programmname ohne Extension.
Hinweis: stopcgi überschreibt den gleichen Wert aus [globals] nur, wenn dieser dort mit 0 festgelegt ist, andernfalls sind alle Programme gestoppt.
Beispiel:
Eine einfache tdbengine.ini könnte beispielweise so aussehen:
[globals]
stopcgi=0
location=http://my.host.de/reconstruction.html
sema=cgi
timeout=5000
overrun=http://my.host.de/overrun,html
logcgi=1
log=/var/log/tdbengine.log
libpath=/home/tdbengine/utils:/dos/c/vdp/lib
semadir=sema
[meinprogramm]
sema=sonderfall
timeout=1000
overrun=http://www.irgendwo.com/ueberlauf.html
cgibuf=200000
...
Lokale Konfigurationsdateien
Normalerweise verwendet die tdbengine die Konfigurationsdatei aus dem gleichem Verzeichnis, in dem auch das ausführbare Programm selbst liegt.
Bevor ein Programm ausgeführt wird, wechselt die tdbengine in dasjenige Verzeichnis, in dem das Programm enthalten ist. Befindet sich in diesem Verzeichnis eine Datei tdbengine.ini, so wird diese als
(ausschließliche) Konfigurationsdatei verwendet.
Das hat viele Vorteile:
* lokale Konfigurationsdateien sind übersichtlicher
* die Konfigurationsdatei kann für ein Projekt maßgeschneidert werden
* bei der Weitergabe an Dritte ist die Konfiguration im Projekt enthalten
Tipps Tipps Tipps
Beispiel: Während einer Reorganisation der Datenbank soll kein CGI-Programm laufen. Das kann ganz einfach mit folgendem Programmfragment erreicht werden:
VAR ini : STRING ini:='/home/tdbengine/bin/tdbengine.ini'
SetIdent(ini,'globals.stopcgi','1')
Pause(100) / sicher ist sicher
...
// hier wird reorganiisiert
...
SetIdent(ini,'globals.stopcgi','0')
Hierzu muss freilich dem anonymen http-user ein Schreibrecht auf tdbengine.ini eingeräumt worden sein.
|