home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 2 BBS
/
02-BBS.zip
/
unisch1a.zip
/
UNISCHED.GER
< prev
next >
Wrap
Text File
|
1999-06-25
|
106KB
|
2,216 lines
U N I S C H E D - The Universal Scheduler
---------------------------------------------
Version 1.0a GA
(C) 1996-99 by Tobias Ernst
(An English Documentation can be found in UNISCHED.ENG)
INHALT
------
1. Was ist Unisched?
2. Wozu brauche ich Unisched?
3. Unisched Schritt für Schritt:
3.1 Vor der Installation
3.1.1 Die TZ-Umgebungsvariable
3.1.2 Richtig entpacken
3.2 Beschreibung der Konfigurationsdatei
3.3 Events und Actions
3.3.1 Aktionen
3.3.2 Rekursionen
3.3.3 Events
3.4 Aufruf und Bedienung
4. Unisched für Fortgeschrittene
4.1 Online-Tossing
4.2 Logausgaben fallweise unterdrücken
4.3 Auf Semaphoren mit Zeitverzögerung reagieren
5. Shareware / Lizenz
6. Kontakt und Support
1. WAS IST UNISCHED?
--------------------
Unisched ist ein Scheduler, der speziell auf die Bedürfnisse eines Nodesystems
im Fidonet zugeschnitten ist. Kurz gesagt: Unisched reagiert auf Ereignisse
mit Aktionen. Als Ereignisse kommen in Betracht:
- Termingesteuerte Ereignisse (z.B. täglich um 15:00, am 1. des Monats ab
10:00, alle 30 Minuten, ...)
- Auftreten von Semaphore-Dateien (von anderen Programmen erstellt)
- Maileingang im Mailer-Inbound
- Drücken von Funktionstasten
Als Aktionen sind möglich:
- Ausführen von externen Programmen, Batche-Files, Skripten, WPS-Objekten
- Sich mit Errorlevel beenden
- Manipulationen im Binkley-Outbound (Poll generieren, Flavours ändern, ...)
- Diverse (z.B. WAV-Files abspielen, Semaphoren erzeugen, Dateien löschen, ..)
Unisched ist an sich ein sehr simples Programm, dabei aber gerade in seiner
Einfachheit sehr mächtig. Deshalb lege ich es jedem nahe, diese Doku
sorgfältig zu lesen (zumindest aber Abschnitt 3.3), denn nur, wenn man das
Prinzip von Unisched verstanden hat, kann man seine Genialität erkennen. :-)
Unisched existiert als DOS-Executable (getestet unter DOS, DESQview, Win95,
Windows NT, OS/2 MDOS) und natürlich als OS/2-Version (UNISCHE2.EXE). Bei
Verwendung der DOS-Version ***MUSS*** Share.Exe oder ein vergleichbarer
Support für File-Locking geladen sein!
2. WOZU BRAUCHE ICH UNISCHED?
-----------------------------
Die Einsatzgebiete von Unisched sind sicher vielfältig. Ich habe es aber
geschrieben als Frontend für den Tossertask eines Fido-Nodes und hier liegen
seine Stärken. Statt in den Mailer-Batches rumzufummeln, läuft mit Unisched
ein separater Tossertask (sei das nun ein Task unter einem Multitasker, oder
ein extra Rechner in einem Netzwerk). Unisched ist die ganze Zeit aktiv. Zu
bestimmten Uhrzeiten startet es den Tosser, um Mail zu exportieren. Wenn im
Mailer Mail empfangen wurde, legt der Mailer eine Sempahore-Datei an, die
Unisched findet und daraufhin den Tosser anweist, die Mail zu importieren.
Wenn man von Hand Mail exportieren will, drückt man einfach in Unisched eine
Funktionstaste. Außerdem weist Unisched den Mailer zu gegebener Zeit an, den
Uplink anzrufuen. Und morgens um sieben startet Unisched ein Weck-Programm
... und und und ...
Der Vorteil dieser Vorgehensweise ist klar ersichtlich: Wenn man den Tosser
aus der Mailer-Batch heraus startet, besteht die Gefahr, daß bei einem
Multiline-System beide Mailer gleichzeitig tossen. Um das zu umgehen, müßte
man aufwendige Semaphore-Konstrukte bauen. Und selbst wenn man diese Hürde
umschifft hat, ist da immer noch ein Problem: Nur, weil man z.B. um halb neun
Mail exportiern möchte, muß man (wenn man Unisched nicht hat) im Mailer ein
Event definieren, was unweigerlich nach sich zieht, daß um halb neun alle
Online-User aus der Box geschmissen werden. Und so fort. Mit Unisched
dagegen ist getrennt, was getrennt gehört: Der Mailer bedient die Modems, und
Unisched kümmert sich um den Rest. Der Mailer hat dann i.d.R. nur noch zwei
Events, nämlich ZMH und der Rest, so daß er sich voll und ganz dem Mailen
widmen kann. ;-)
3. UNISCHED SCHRITT FUER SCHRITT
--------------------------------
3.1. VOR DER INSTALLATION
-------------------------
3.1.1 Die TZ-Umgebungsvariable
------------------------------
Unisched wertet die TZ-Umgebungsvariable aus. Es ist nicht unbedingt
notwendig, diese zu setzen, verhindert aber unschöne Effekte bei der
Umstellung Sommer->Winterzeit und umgekehrt.
Um an dieser Stelle nicht zu langweilen: Es ist nicht intuitiv (intuitiv
würde ich für Deutschland GMT+1 setzen, aber das stimmt überhaupt nicht)
und für einen Nicht-Programmierer auch absolut nicht-trivial, wie sich die
TZ-Variable zusammensetzt. Daher gebe ich hier einfach die richtigen
Werte an:
Mitteleuropäische Winterzeit: SET TZ=MEZ-1
Mitteleuropäische Sommerzeit: SET TZ=MEZ-2MSZ
Viele anderen Programe werten diese Variable ebenfalls aus (insbesondere
der Tosser beim Erstellen der VIA-Zeilen), es ist also auf jeden Fall
ratsam, diese Werte so in die Autoexec.Bat (bei OS/2 zusätzlich auch in
die Config.Sys, aber auch in die Auotexec.Bat im Boot-Drive, wenn das
ganze auch für DOS-Sessions gelten soll!) zu übernehmen und erstmal neu zu
booten.
Wenn man dann die Zeitumstellung (Uhr vor- oder zurückstellen) vornimmt,
sollte man erst Unisched runterfahren, dann die TZ-Variable ändern, und
dann Unisched wieder hochfahren. Anderenfalls werden periodische Events
mehrfach ausgeführt. (Damit kann man natürlich auch leben, z.B., wenn man
eine Funkuhr hat ...).
Noch eine Anmerkung: Es kursiert für OS/2 ein Programm, daß TZ-Variablen
ausrechnen zu können glaubt. Dieses generiert unglaublich lange Strings,
die dazu führen sollen, daß man sowohl zur Sommer- als auch zur Winterzeit
die gleichen Werte benutzen kann, also nicht von Hand umstellen braucht.
Der Nachteil an diesem Programm ist, daß dieses Format der TZ-Variablen
nur von mit IBM-Compilern oder mit EMX GCC kompilierten Programmen
verstanden werden. Programme, die mit anderen Compilern erstellt wurden
(wie insbesondere Unisched, bei dem es noch nicht so schlimm ist, aber
auch z.B. Fastecho), können diese "langen" TZ-Variablen nicht auswerten.
Deshalb empfehle ich, die von mir oben angegebenen Strings zu verwenden
und es in Kauf zu nehmen, daß man halt zweimal im Jahr umstellen muß.
3.1.2 Richtig entpacken
-----------------------
Das originale Distributionsarchiv von Unisched ist mit ZIP gepackt
OS/2-User entpacken die Datei bitte unbedingt mit der OS/2-Version von
INFOZIP oder PKZIP. UNISCHE2.EXE enthält nämlich erweiterte Attribute
(das Icon), die der DOS-PKUNZIP nicht korrekt umsetzen kann.
(Wens interessiert, mit RAR habe ich abgeschlossen. Ich hatte an einer
Sammelregistration der DS teilgenommen und auf dem Formular angegeben, daß
ich DOS- und OS/2-Versionen benötige. Statt daß man mich nun davon in
Kenntnis setze, daß ich für den Sammelregistrierungspreis nur eine Lizenz
für ein BS erhalten kann und zu fragen, welches ich denn gern hätte, habe
ich schlicht nur die DOS-Version erhalten. Man war auch nicht bereit,
diesen Key gegen einen OS/2-Key umzutauschen. Und nochmal Geld ausgeben
tue ich bei so einem "Service" sicher nicht.)
Wenn Ihr eine umgepackte Version ohne erweiterte Attribute erhalten habt,
müßt Ihr entweder ohne das Icon leben, oder das korrekte Archiv bei mir
requesten, oder (für Fortgeschrittene), das Icon per Ressourcenkompiler
selbst wieder an die EXE-Datei linken (es ist auch separat als
UNISCHED.ICO beigefügt). Am Besten aber macht Ihr Euren Uplinks Dampf.
Umpackerei ist IMO eines der größten Übel in der Filenetz-Welt.
3.2. BESCHREIBUNG DER KONFIGURATIONSDATEI
-----------------------------------------
Vorab: In der Regel (...) ist Unisched bei der Auswertung der
Konfigurationsdatei nicht casesensitiv (d.h., Groß- oder Kleinschreibung ist
egal), auch bei Aktionsnamen nicht, aber es ist trotzdem eine gute Idee,
sich eine konsistente Schreibweise anzugewöhnen.
Bevor wir uns nun dem eigentlichen Prinzip von EREIGNIS und AKTION zuwenden,
muß UNISCHED erst mal vorkonfiguriert werden (Pfade und der ganze Kram).
Deshalb folgt im Anschluß eine Beschreibung aller gültigen Schlüsselwörter
in der Datei UNISCHED.CFG. Falls Du zu den Personen gehörst, die die
magische Gabe haben, aus kryptischen Schlüsselwörtern instantan deren
Bedeutung zu erschließen, kannst Du diesen Abschnitt 3.2 überspringen. Lies
aber ab 3.3 auf jeden Fall wieder mit, da wirds wichtig.
Genaugenommen besteht die UNISCHED.CFG aus zwei Teilen. Zunächst die
allgemeinen Einstellungen, die im Anschluß beschrieben werden, und dann die
Event-Action-Config, die in Kapitel 3.3 beschrieben wird. Die Reihenfolge
der zugehörigen Kommandos in der Config-Datei ist übrigens beliebig
(Ausnahme: SemaDir).
In der Konfigurationsdatei können %UMGEBUNGSVARIABLEN% verwendet werden.
Einzelne %-Zeichen lassen sich im Zweifelsfalle durch ein doppeltes
%-Zeichen (also %%) erzwingen. Ein Semikolon in der Konfigurationsdatei,
das entweder in der ersten Spalte stehen oder aber dem ein Leerzeichen
vorausgehen muß, leitet einen Kommentar ein (d.h., einen Abschnitt, der
nicht beachtet wird), der bis zum Ende der jeweiligen Zeile dauert. Falls
ein Semikolon tatsächlich einmal irgendwo nicht als Kommentar interpretiert
werden soll/muß, und es nicht möglich ist, dem Semikolon etwas anderes als
ein Leerzeichen vorangehen zu lassen, so muß man es mit einer
Umgebugnsvariablen emulieren: Vor dem Start von Unisched den Befehl SET
SEMIKOLON=; eingeben und dann in der Konfigurationsdatei dort, wo das
Semikolon gebraucht wird, stattdessen %SEMIKOLON% schreiben.
Nun zu den eigentlichen Schlüsselwörtern. Im folgenden schließen [ eckige
Klammern ] optionale Parameter ein, das | Pipe-Zeichen trennt Parameter, die
sich gegenseitig ausschließen, und <spitze Klammern> umschließen
Platzhalter, an deren Stelle passende Werte eingesetzt werden müssen. Alle
anderen Zeichen sind so wie sind anzugeben.
Alivetime = <minutes>
---------------------
Unisched legt beim Start eine Datei "UNISCHED.BSY" an (Busy-Semaphore), die
er erst bei Beendigung wieder löscht. Dieser Parameter gibt an, alle
wieviel Minuten der Timestamp diese Semaphore auf die neuste Uhrzeit
gesetzt werden soll. Wird diese Zeile gar nicht in der Config angegeben,
wird die Busy-Semaphore nur bei Programmneustart auf neuere Uhrzeiten
gesetzt.
Autofail = On | Off
-------------------
Wenn kritische Fehler bei der Ausführung von Unisched auftreten (was
durchaus wahrscheinlich ist, z.B. wenn Unisched versucht, nach einer
Semaphore zu testen, die noch nicht lesbar ist), erscheint normalerweise
eine Fehler-Abfrage, unter DOS das obligatorische "Retry, Abort, Fail?",
unter OS/2 eine Fehler-Dialogox. Das ist im unbeaufsichtigten Betrieb
natürlich unerwünscht, weil dadurch das ganze System zum Stehen kommt.
Unisched installiert deswegen normalerweise eine Fehlerbehandlungsroutine,
die diese Fehlermeldungen unterdrückt.
Falls diese Fehlerbehandlungsroutine (int24 unter DOS, DosError unter OS/2)
zu Problemen führrt, kann man sie mit "Autofail = Off" deaktivieren. Das
sollte normalerweise jedoch nicht notwendig sein.
Unter OS/2 gilt die Fehlerbehandlungsroutine nur für Unisched selbst, nicht
aber für seine Tochterprozesse - falls z.B. beim Tossen ein Fehler auftritt
und der Tosser keine eigene Fehlerbehandlung hat, gibts wieder die
Dialogbox. Unter OS/2 sollte man daher immer auch "AUTOFAIL=YES" in die
CONFIG.SYS schreiben.
Achtung: In den Betas von Unisched war Autofail defaultmäßig ausgeschaltet
- ab Version 1.0 (Release) jedoch ist Autofail jetzt standardmäßig
eingeschaltet!
Bsp:
Autofail = On
Clock = On | Off
----------------
Gibt an, ob in der Titelzeile eine Uhr eingeblendet werden soll. Default
ist On, aber Off spart ein kleines bißchen Rechenzeit ...
Bsp.:
Clock = On
DiskLog = <Loglevels>
---------------------
Gibt an, welche Arten von Meldungen alle ins Log-File geschrieben werden
sollen. Es existieren folgende Loglevel:
! Statusmeldungen ("starting", "shutting down", nicht abschaltbar)
? Fehlermeldungen und Warnungen (nicht abschaltbar)
* Semaphore-Events \
. Funktionstasten-Events \ Das sind alles Auslöser für Aktionen
~ Periodische Events / von Unisched
# Statische Events /
+ Aktionen (das, was von Events ausgelöst wird)
- Ausgewählte Wide-Beta Debug-Meldungen
p Meldungen des Parsers bei der Abarbeitung von Aktionsdefinitionen
_ Eine Leerzeile nach einem Event-Aktion-Block (erhöht die
Übersichtlichkeit, wenn man sehr viel Loggen läßt - ich empfehle, _
immer dann zu verwenden, wenn man auch p verwendet).
Wenn man die Chance, daß ich auf Bugreports reagiere, drastisch erhöhen
will, sollte man das mir übersandte Logfile MINDESTENS mit folgendem
DiskLogLevel erstellen:
DiskLog = !?*.~#+-
Während der Wide-Beta Phase sollte man generell nicht weniger nehmen.
ExcessiveSlicing = <zahlenwert> | Yes | No
------------------------------------------
Dieser Schalter betrifft die Abgabe von Zeitscheiben in
Multitaskingumgebungen. Wird er auf einen Zahlenwert ungleich Null gesetzt
(Yes entspricht 5, No entspricht 0), werden deutlich mehr Zeitschreiben
freigegeben. Du mußt selbst ausprobieren, ob Du diesen Schalter brauchst.
Generell gilt: Wenn Dir die Systemlast von Unisched zu hoch erscheint,
solltest Du ihn soweit hochsetzen, daß die Uhr rechts oben gerade noch jede
Sekunde einzeln auflöst (etwas ruckelig darfs sein, aber es sollten keine
Sekunden übersprungen werden).
Hier ein paar Erfahrungswerte, mit denen Unisched akzeptabel arbeitet:
OS/2 nativ: 0
OS/2 DOS-Box: 1 oder 0
Windows NT: 20
Windows 95: Mit 0 läuft es akzeptabel, weitere Tests liegen nicht vor.
FlushLog = Yes | No
-------------------
Wenn FlushLog auf Yes gesetzt ist (das ist die Defaulteinstellung),
schreibt Unisched sein Logfile auf die Platte (er erzwingt das selbst bei
WB Caching, indem er das File schließt und wieder öffnet), sobald er nichts
besseres zu tun hat. Der Vorteil ist, daß dann selbst bei einem
Systemabsturz oder anderem unnormalen Programmende noch bis zuletzt alle
Logfiledaten erhalten bleiben; außerdem zeigt ein Logfileviewer auch
während Unisched noch läuft immer schon die aktuellsten Logfileeinträge.
Falls dieses Verhalten nicht erwünscht ist (mir fallen dafür freilich keine
Gründe ein), kann man es mit "FlushLog = No" abschalten - dann wird das
Logfile nur sehr selten auf die Platte geschrieben bzw. spätestens, wenn
Unisched beendet wird.
IgnoreOldBusyFlag = <minutes>
-----------------------------
Im Binkley-Outbound kann für jeden Node neben Flowfiles, die Angaben über
die zu versendenden Dateien enthalten, auch ein .BSY-File vorhanden sein.
Dieses dient der Serialisierung der Zugriffe verschiedener Programme auf
den gemeinsamen Outbound: Während ein .BSY-File vorhanden ist, darf kein
anderers Programm außer dem Ersteller des .BSY-Files Änderungen am
Binkley-Outbound vornehmen.
Unisched hält sich an dieses Konzept und ist dabei besonders intelligent:
Wenn er ein .BSY-Flag findet, unterläßt er nicht einfach die Aktion, die er
eigentlich vorhatte, sondern prüft in periodischen Abständen später wieder
nach, ob das .BSY-Flag nun verschwunden ist, und holt, sobald das der Fall
ist, seine Änderungen nach.
Nun kann es passieren, daß sich im Outbound .BSY-Flags befinden, die von
Programmen, die während der Arbeit gewaltsam beendet wurden (Abschuß oder
Absturz ...), nicht mehr gelöscht werden konnten. In so einem Fall würde
der Tosser keine Mail mehr für diesen Node tossen, Unisched würde keine
Pollflags für diesen Node mehr anlegen, der Mailer würde diesen Node nicht
mehr anrufen, und effektiv wäre der Link mit diesem Node also tot, bis der
Sysop von Hand eingreif. Dazu muß er das natürlich erst einmal merken ...
Deshalb geht Unisched, wenn er ein Pollflag anlegen oder eine andere Aktion
im Binkleyoutbound durchführen will, davon aus, daß ein Busy-Flag, das
älter als 3 Stunden ist, nur von einem Systemabsturz herrühren kann, und
ignoriert bzw. löscht ein solches Flag.
Falls jemand der Defaultwert von 3 Stunden zu kurz oder zu lang ist, kann
er diesen Wert mittles "IgnoreOldBusyFlag" ändern. Ein Wert von 0 schaltet
dabei das Feature ganz ab (in dem Falle wird grundsätzlich jedes .BSY-Flag
"ernstgenommen" und gewartet, bis es tatsächlich verschwindet); andere
Werte geben das maximal gültige Alter des .BSY-Flags in Minuten an (der
Defaultwert ist also 180).
IgnoreOldBusyFlag = 90
IgnoreOldBusySem = <minutes>
----------------------------
Wenn Unisched beim Starten die Datei UNISCHED.BSY vorfindet, geht er davon
aus, daß bereits ein anderer Unisched-Task gestartet ist, und startet
selbst nicht. Wird "IgnoreOldBusySem" verwendet, so prüft Unisched aber
zuvor, wie alte die Busy-Semaphore ist, und startet ggf. trotzdem, falls
sie nämlich älter ist als die angegebene Anzahl von Minuten. (In dem Fall
geht er davon aus, daß die Busy-Semaphore von einem Systemabsturz o.ä.
übrig geblieben ist). Wenn man IgnoreOldBusySem verwendet, muß man
natürlich auch AliveTime (s.o.) verwenden, sonst könnte die Busy-Semaphore
ein sehr altes Timestamp tragen, obwohl der zugehörige Task noch arbeitet.
Die Anforderungen an die Zahlenwerte für AliveTime und IgnoreOldBusySem
hängen von der Konfiguration von Unisched ab. Wenn man (z.B. unter OS/2
mit EXEC START /C /MIN BLAHBLUBB.CMD) alle externen Programme, die Unisched
startet, in einem separaten Hintergrundtask startet, kann man davon
ausgehen, daß Unisched nie lange daran gehindert wird, den Timestamp der
Busy-Semaphore zu aktualisieren, und man kann kleine Zahlenwerte nehmen:
AliveTime = 1
IgnoreOldBusySem = 5
In dem Fall ist eine übriggebliebene Busy-Semaphore nach einem
Systemneustart vermutlich schon überaltert, und Unisched startet schon
wieder.
Wenn man jedoch, z.B. um Zugriffskonflikte auf der Messagebase
auszuschließen, externe Aufgaben wie Tossen im Unisched-Fenster selbst
ausführen läßt (EXEC BLAHBLUBB.CMD), muß man damit rechnen, daß Unisched
für längere Zeitspannen die Busy-Semaphore nicht updaten kann, und
IgnoreOldBusySem auf einen entsprechend hohen Wert setzen. Ein
Aufräumevent kann schon mal zwei Stunden dauern:
AliveTime = 10
IgnoreOldBusySem = 180
Egal wie man es löst - in jedem Fall sollte man auch unter OS/2, um
Tosserausfälle während Abwesenheit zu verhindern, Unisched aus einer Batch
heraus starten, die, falls Unisched wegen BusySemaphore nicht startet (er
liefert in dem Fall Errorlevel 255), den Unisched wieder erneut startet,
solange, bis die BusySemaphore veraltet ist:
:start
unische2 /cunisched.cfg
if errorlevel 255 goto start
Unisched gibt genug Zeitschreiben frei, damit diese Konstellation im
Zweifelsfalle zumindest unter OS/2 NICHT zu 100% Systemlast führt).
Include = <path+filename>
-------------------------
Einbinden zusätzlicher Konfigurationsdateien. Fügt die angegebene Datei an
genau dieser Stelle in die Konfiguration ein. Bsp:
Include = e:\configs\colors.cfg
KeyColumns = <Spaltenzahl>
--------------------------
Gibt an, in wieviel Spalten die Funktionstastenbeschreibungen angeordnet
werden sollen. Default ist 4, wenn man aber kleinere Fenstergrößen oder
längere Eventnamen wählt, können 3 Spalten besser lesbar sein.
Bsp:
KeyColumns = 3
Logfile = <path+filename>
-------------------------
Hier gibst Du das Unisched-Logfile an. Dieses Schlüsselwort sollte als
allererste Zeile in der Unisched.Cfg stehen, da nur so Konfigurationsfehler
im weiteren Verlauf der Datei, die zum Programmabbruch führen, auch im
Logfile festgehalten werden können.
Bsp.:
Logfile = e:\box\log\unisched.log
Wenn Du mehrere Kopien von Unisched gleichzeitig laufen läßt (warum sollte
man das tun?), muß jede ein anderes Logfile haben.
MTask = <multitasker>
---------------------
Diese Option existiert nur in der DOS-Version. Man kann hier angeben, für
welchen Multitasker Unisched Timeslices freigeben soll. Normalerweise
erkennt Unisched den Multitasker automatisch, aber manche Multitasker
lassen sich nicht erkennen (z.B. Topview), und manchmal klappt die
Erkennung nicht richtig (z.B. Windows NT). Für <multitasker> können
folgende Strings eingesetzt werden:
DESQview Quarterdeck DESQview
PC-MOS PC-MOS (von wem war das doch gleich?)
Windows Windows 3.1, 95 und NT
DoubleDOS DoubleDOS
OS/2 Warum nicht gleich UNISCHE2.EXE nehmen? ;-)
TopView TopView
Multilink Multilink
BIOS Timeslicing über BIOS
Generic Timeslicing über Multiplexerinterrupt
None Timeslicing ganz ausschalten
Beachte auch die zugehörige Einstellung von "ExcessiveSlicing" (siehe
oben).
Outbound = <path>
-----------------
Gibt den Basispfad des statischen (Binkley-) Outbounds an. Diese Angabe
wird für das Erzeugen von Polls beim Uplink benötigt und ist obligatorisch.
Auch wenn Du keinen Binkley-Outbound hast und/oder die Poll-Funktion gar
nicht nutzen willst, mußt Du hier was angeben. Nimm dann halt irgend ein
leeres Verzeichnis.
Bsp.:
Outbound = e:\box\binkley\outbound
Die Outbound-Verzeichnisse anderer Zonen (outbound.0f2 usw.) errechnet
Unisched selbst. Wenn Du allerdings ein vollständiges Domain-Setup hast,
wo die Outbound-Pfad anders heißen (z.B. Zone 456, Domain mediaserve.de
führt zu mediaser.1c8 statt outbound.1c8), mußt Du diese Verzeichnisse in
der Config wie folgt angeben:
<Zonennummer> = <Outboundbasisname>
-----------------------------------
Das Domain-Setup. Braucht man, wenn der Outbound für Zone 456 nicht
Outbound.1c8, sondern Mediaser.1c8 heißt. (Domainesetup bei Binkley; bei
McMail verändert sich der Outboundname auch bei eingetragenen Domains
nicht). Wichtig: Bei Outboundbasisname den tatsächlichen Pfadnamen
angeben, *nicht* den eigentlichen Domainnamen. Die Zonennummer muß aber
dezimal angegeben werden. Beispiel:
Zonennummer: Domainname: Outboundverzeichnisname:
1 fidonet e:\inout\outbound.001
2 fidonet e:\inout\outbound
...
6 fidonet e:\inout\outbound.006
9 virnet e:\inout\virnet.009
242 fido.de e:\inout\fidode.0f2
Eine solche Outboundkonfiguration wird in Unisched eingetragen als:
Zone = 2
Outbound=e:\inout\outbound
9 = Virnet
242 = FIDODE
Man beachte: fidode, NICHT fido.de, aber 242, NICHT 0f2.
Pipe = <pipename>
-----------------
Schreibt Unisched-Logmeldungen in eine Named Pipe, aus der sie mit
Snooper-Programmen wie PMPIPER, PIPEMAN, RXSNOOP u.a. ausgelesen werden
können. Nützlich, wenn man einen auf dem Server laufenden Unisched von
einem anderen Rechner aus überwachen will. Beispiel:
Pipe = \\pipe\unisched
Unisched unterstützt bei Pipes übrigens auch Reconnects, im Gegensatz zu
Binkley und anderen, die in dem Fall immer neu gestartet werden müssen.
Eine Pipe sollte nur konfiguriert werden, wenn sie auch tatsächlich benutzt
wird, da dies sonst den Start von Unisched unnötig verzögert.
PipeLog = <Loglevels>
-----------------------
Gibt an, welche Arten von Meldungen in die Named Pipe geschrieben werden
sollen. Syntax und verfügbare Loglevels ist genau gleich wie bei
"DiskLog".
RecentActivityLines = <n>
-------------------------
Gibt an, wieviele Zeilen im Backscroll-Puffer gehalten werden. Der
Backscrollpuffer speichert ältere Zeilen, die im Logfenster standen, so daß
man komfortabel mit PgUp/Dn, Home/End und den Cursortasten durch alte
Einträge im Logfenster scrollen kann. Mit der Logdatei hat das aber nichts
zu tun. - Der Defaultwert für diese Variable ist 100, und das Hochsetzen
auf Werte > 500 empfiehlt sich NUR in der OS/2-Version.
Wem dieses Schlüsselwort bekannt vorkommt: Ja, es heißt bei Binkley XE
genauso - die Technik, die bei Unisched dahinter steckt, ist aber
wesentlich robuster als bei Binkley :-).
ResetDialCounters = Yes | No
----------------------------
Vor einem Poll grundsätzlich alle Nodial-Marks, Dial-Counters,
Overtry-Marks etc. des betreffenden Nodes löschen. Kann man alternativ
aber statt hier global auch nur für einzelne Polls über RDC bei der Aktion
POLL definieren (siehe dort).
RescanSema = <path+filename>
----------------------------
Name der Semaphore-Datei, die Deinen Mailer dazu bewegt, einen Rescan zu
machen. Unisched muß einen solchen z.B. beim Erzeugen eines Polls
auslösen.
Bsp:
RescanSema = e:\box\sema\btrescan.flg
RescanSema = e:\box\sema\mcmscan.all
Unisched kann auch nur auf der Line, die konkret pollen soll, einen Rescan
auslösen. Die Linenummer wird dann erst von Unisched in den Dateinamen
eingefügt. Die Stelle, an der die Nummer eingefügt wird, wird wie in C
üblich eingetragen:
%d für dezimal
%03d für dezimal, aber immer drei Stellen, ggf. mit 0en auffüllen
%x für hexadezimal
%02x für hex, aber immer zwei Stellen, ggf. mit Nullen auffüllen
etc.
Bsp.:
RescanSema = e:\box\sema\mcmscan.%d
Dies führt dann zu mcmscan.1, mcmscan.2 usw., je nachdem, welche Line
gewünscht ist.
Es können bis zu zehn verschiedene "RescanSema"-Zeilen angegeben werden.
Dies ist dann interessant, wenn man im Wechsel verschiedene Mailer
(Binkley, McMail, ...) benutzt und immer für alle gleichzeitig die
richtigen Semaphoren erstellen möchte.
Registername = <Name>
Registerkey = <Key>
---------------------
Überweis' mir zwölf Euros, und ich sage Dir, was Du hier eintragen mußt.
:-)))
ScreenLog = <Loglevels>
-----------------------
Gibt an, welche Arten von Meldungen im Log-Fenster auf dem Bildschirm
erscheinen sollen. Syntax und verfügbare Loglevels ist genau gleich wie
bei "DiskLog".
SeeHiddenFiles = Yes | No
-------------------------
Dieses Flag bestimmt, ob Unisched beim Suchen nach Sempahoren und anderen
Flagfiles (ausführliche Erklärung folgt unten) nur "normale" Dateien
"sieht" (No, Defaulteinstellung), oder ob er auch versteckte Dateien
(solche mit "Hidden" oder "System" Attribut) sehen kann.
SemaDir = <Pfadname>
--------------------
Hier kannst Du Dein Semaphorenverzeichnis eintragen (das Verzeichnis, in
dem die Signaldateien mit Nullänge liegen, über die verschiedene Programme
untereinander kommunizieren). Semaphoren können hinterher auch woanders
sein, dies ist nur das Default-Verzeichnis, das verwendet wird, wenn Du in
der Event-Action-Config keinen expliziten Pfad für eine bestimmte Sempahore
angibst. SemaDir wirkt sich nur auf diejenigen Semaphoren-Definitionen
aus, die in der Konfigurationsdatei UNTERHALB des SemaDir-Statements
stehen. Deshalb schreibt man SemaDir am Besten GANZ AN DEN ANFANG der
KONFIGURATIONSDATEI.
Bsp.:
SemaDir = e:\box\sema
SemaphoreCheckInterval = <sekunden>
-----------------------------------
Unisched bietet eine Funktion, Aktionen auszulösen, wenn Dateien erscheinen,
gelöscht werden, älter als xx Stunden sind, und so weiter. Dafür muß
Unisched periodisch auf die Festplatte zugreifen um nachsehen zu können, ob
sich bei den überwachten Dateien etwas verändert hat.
Mit SemaphoreCheckInterval kann man angeben, alle wieviel Sekunden diese
Prüfung erfolgen soll. Es handelt sich dabei um einen ungefähren
Richtwert. Der Standardwert ist 1 (jede Sekunde prüfen). Er garantiert,
daß Unisched schnellstmöglich auf Änderungen reagiert. Solange Unisched
Dateien prüft, die sich auf einer lokal vorhandene Festplatte befinden, ist
das kein Problem, da diese Anfragen aus dem Cache befriedigt werden und
somit praktisch keine Systembelastung darstellen.
Prüft Unisched jedoch Dateien auf über ein LAN gemounteten Laufwerken, oder
auf Laufwerken, für die kein Cache aktiv ist (DOS ohne SmartDrv o.ä.), so
empfiehlt es sich, diesen Wert auf 10 Sekunden oder höher zu setzen, um die
Netz- bzw. Festplattenbelastung zu minimieren.
Bsp.:
SemaphoreCheckInterval = 30 ;jede halbe Minute prüfen
SmallWindow = On | Off
----------------------
Mit SmallWindow = On benutzt Unisched statt 80x25 nur 66x18 Zeichen. Das
macht unter DESQview Sinn, wenn man eine kleinere Fenstergröße einstellt.
Unter OS/2 wird dieser Parameter von zukünfitgen Versionen nicht mehr
unterstützt werden. Unter OS/2 kann man vor dem Start von Unisched über
Kommandozeile mittles MODE beliebige Fenstergrößen einstellen (zum Beispiel
MODE CO66,18), die Unisched automatisch erkennt und sich dann entsprechend
anpaßt.
Bsp.:
SmallWindow = Off
SpawnInit = $Aktionsname
------------------------
Führt die angegebene Aktion einmalig bei Programmstart aus. Was Du bei
$Aktionsname eintragen kannst, erfährst Du in Abschnitt 3.3. Es sind bis
zu 16 SpawnInit-Angaben zulässig.
Bsp:
SpawnInit = $Begrüßungslied
Hinweis für OS/2-User: Was NICHT funktioniert, ist sowas wie "SpawnInit =
EXEC MODE CO150,80". Wenn man die VIO-Fenstergröße verändern will, muß man
dies echt vor dem Aufruf von Unisched machen (in einer CMD), weil Unisched
das sonst nicht merkt (liegt an Beschränkungen meines Compilers, nicht an
mir ...).
Zone = <nr>
-----------
Hier gibst Du Deine "Heimatzonennummer" an (Europa: 2, USA: 1). Diese
Angabe ist obligatorisch, da sie für die korrekte Ermittlung der Namen der
Outbound-Verzeichnisse notwendig ist. Wenn Du keinen Binkley-Outbound hast
und/oder die Pollfunktion nicht nutzen willst, gibst Du einfach irgendwas
an.
Bsp.:
Zone = 2
ColBorder = <nr>
ColKeys = <nr>
ColKeyDescriptions = <nr>
ColHeadLine = <nr>
ColEvent = <nr>
ColLog = <nr>
-------------------------
Farbnummern, falls die Defaults nicht gefallen, und zwar wird die Nummer
berechnet über Vordergrundfarbe+16*Hintergrundfarbe aus folgender Tabelle:
│ │Hinter-│Vorder- │ │Hinter-│Vorder-
Farbe │ Wert│grund? │grund? Farbe │ Wert│grund? │grund?
═════════════╪═════╪═══════╪═══════ ══════════════╪═════╪═══════╪═══════
BLACK │ 0 │ Ja │ Ja DARKGRAY │ 8 │ Nein │ Ja
BLUE │ 1 │ Ja │ Ja LIGHTBLUE │ 9 │ Nein │ Ja
GREEN │ 2 │ Ja │ Ja LIGHTGREEN │ 10 │ Nein │ Ja
CYAN │ 3 │ Ja │ Ja LIGHTCYAN │ 11 │ Nein │ Ja
RED │ 4 │ Ja │ Ja LIGHTRED │ 12 │ Nein │ Ja
MAGENTA │ 5 │ Ja │ Ja LIGHTMAGENTA │ 13 │ Nein │ Ja
BROWN │ 6 │ Ja │ Ja YELLOW │ 14 │ Nein │ Ja
LIGHTGRAY │ 7 │ Ja │ Ja WHITE │ 15 │ Nein │ Ja
Beispiel: Roter Vordergrund, grüner Hintergrund = 4+16*2 = 36, also z.B.
ColKeys = 36
3.3. Events und Actions
-----------------------
3.3.1 ACTIONS
-------------
Wie bereits erwähnt: Unisched reagiert auf Ereignisse (EVENT) mit Aktionen
(ACTION). Bevor wir Events festlegen, müssen wir erst die Aktionen
definieren (*was* soll Unisched tun?).
Eine Definition einer Aktion beginnt immer mit einem $-Zeichen, gefolgt von
dem Name der Aktion (NUR Buchstaben und der Unterstrich!!!). Dann ein
Gleichheitszeichen, und dahinter die eigentliche Aktion.
Bsp.:
$HUB_ANRUFEN = POLL 2:2476/404 crash 2
Im Folgenden wird nun die Syntax aller Aktionen erklärt, die hinter dem
Gleichheitszeichen verwendet werden können:
BEEP [<Frequenz> [<Dauer>]]
---------------------------
Gibt einen Piepton aus. Frequenz und Dauer können angegeben werden in
Hertz bzw. Millisekunden; werden sie weggelassen, werden 1000 Hz und 100
ms angenomen (kurzer Piepser).
Anwendungsgebiete: Weck-Piepser, Stündliches Piepsen wie bei Armbanduhr,
...
Bsp.:
$LANG_UND_LAUT = BEEP 800 4000
$PIEPSIG = BEEP 1000 80
Wer mehr machen will als nur einen Piepston ausgeben, der sollte sich die
Aktion "PLAY" in Verbindung mit MUS-Dateien ansehen.
EXEC <command>
--------------
Unisched führt das externe Programm <command> aus und wartet dessen
Beendigung ab. <command> wird dabei an den Kommando-Interpreter
(COMMAND.COM, CMD.EXE) übergeben, so daß neben EXE- und COM-Programmen
auch BAT- und CMD-Dateien (auch REXX-Skripte) ausgeführt werden können
ebenso wie Befehle des Kommando-Interpreteres (z.B. COPY). Also nochmal:
> Alles, was hinter EXEC kommt, wird genauso ausgeführt, als würde man
> von Unisched aus eine DOS/OS/2Shell gehen und dort genau diesen String
> eingeben.
Bsp.:
$MAIL_Exportieren = EXEC e:\box\batch\export.bat
Ein Tip für OS/2-User: Wenn der Tosser in einem separaten Task gestartet
werden soll, kann man die START-Aktion statt der EXEC-Aktion verwenden.
EXIT <errorlevel>
-----------------
Unisched beendet sich mit <errorlevel>. Dies ist nützlich, wenn Unisched
selbst aus einer Batch heraus aufgerufen wird. Der Errorlevel kann dann
von der Batch ausgewertet werden, um das passende Programm zu starten.
Gegenüber dem direkten Starten eines Programmes mit EXEC hat diese
Methode den Vorteil, daß Unisched während der Ausführung des Programmes
sich nicht mehr im Speicher befindet, so daß ca. 60KB mehr zu Verfügung
zu stehen.
Bsp:
$TOSSER_UEBER_BATCH_STARTEN = EXIT 80
IGNORE
------
Tut schlicht und ergreifend nichts.
OPEN <OBJEKT_ID> und OPEN <PFADNAME>
------------------------------------
Dieser Befehl steht nur unter OS/2 zur Verfügung, und auch da nur, wenn
die Workplace Shell installiert ist. Mit diesem Befehl kann Unisched
WPS-Objekte genau so öffnen, wie wenn man auf der WPS darauf
doppelklicken würde.
Als Parameter für OPEN kann zum einen in spitzen Klammern eine Objekt-ID
eingegeben werden. Mittels Drittsoftware wie z.B. Deskman/2 kann man
beliebigen Icons auf der WPS eine eindeutige Objekt-ID zuweisen. Mittels
einfachen Rexx-Skripten (ich verweise auf die Rexx-Dokumentation zu
"SysSetObjectData") kann man zumindest neue Icons mit definierten
Objekt-IDs erstellen. So ist es dann möglich, mit Unisched beliebige
"Icons" zu starten. Das hat übrigens einen netten Seiteneffekt: Die WPS
ist ja defaultmäßig so konfiguriert, daß sie jedes Icon nur einmal
startet und bei einem erneuten Doppelklick (oder eben Start durch
Unisched) nur zum laufenden Programm switched, es aber nicht nochmal
parallel ausführt. So könnte man z.B. ein Icon für den Tossertask
anlegen und dann dieses via WPS starten lassen - und schon ist man
sicher, daß der Tosser nie zweimal gleichzeitig gestartet wird.
Das folgende Rexx-Skript würde z.B. ein Icon erstellen, das die
"tosser.cmd" aufruft. Das Skript als "test.cmd" abspeichern, und zwar
so, daß die Zeichenfolge /* als erstes in der ersten Zeile ganz links
oben in der Datei steht:
/* REXX */
call RxFuncAdd 'SysCreateObject', 'RexxUtil', 'SysCreateObject'
n = SysCreateObject("WPProgram",,
"Tosser Starten",,
"<WP_DESKTOP>",,
"EXENAME=e:\tools\tosser.cmd;"||,
"OBJECTID=<MYID_TOSSERTASK>",,
"update")
exit
Ein solchermaßen erstelltes Icon läßt sich von Unisched mittels folgender
Aktion aufrufen:
$Tosser = OPEN <MYID_TOSSERTASK>
Zum anderen kann man statt einer Objekt-ID auch einfach einen Dateinamen
angeben. Hierbei muß es sich allerdings um einen voll qualifizierten
Pfadnamen handeln, also Laufwerksbuchstabe plus absoluter Pfad. Dabei
passiert dann genau das gleiche, wie wenn Du in den Laufwerksobjekten auf
die entsprechende Datei klicken würdest, incl. Beachtung aller
Assoziationen u.ä. Um z.B. das Papageienvideo abzuspielen, könntest Du
Folgendes schreiben:
$Papagei = OPEN c:\mmos2\movies\macaw.avi
PLAY <filename.MUS>
-------------------
Spielt die angegebene MUS-Datei ab. MUS-Dateien enthalten
Klartext-Kommandos, die in der Syntax ganz ähnlich sind wie BEEP:
TONE <frequenz> <hundertstelsekunden>
WAIT <hundertstelsekunden>
Man kann damit selbst komponieren, wenn man Lust hat. Es handelt sich um
das Format, in dem auh die Proboard- und Remote Access - Musikdateien
(Pagesongs) gehalten sind. Ein paar Beispiel-MUS-Dateien kann man bei
mir (2:2476/418) unter UAPS10.ARJ requesten.
In der OS/2-Version werden die Kunstwerke im Hintergrund abgespielt, die
Abarbeitung von Events wird also nicht aufgehalten. Das Abspielen kann
mit der Aktion ABORTMUSIC abgebrochen werden. Bsp:
$Wecker = PLAY f:\box\pb\Wecker.MUS
$Jajajaistjagut = ABORTMUSIC
In der DOS-Version muß man den Wecker bis zum Ende ertragen ...
PLAY <filename.WAV|.MID>
------------------------
Spielt die angegebene WAV- oder MID-Datei ab. Diese Aktion funktioniert
nur in der OS/2-Version und erfordert installierten MMPM/2. Das Abspielen
erfolgt im Hintergrund.
Bsp:
$Bigben = PLAY f:\sounds\gong.wav
POLL <node> [<flavour>] [COND] [RDC] [LINE<linenr>]
---------------------------------------------------
Legt im Binkley-Outbound einen Poll für <nodenumber> an. Die Reihenfolge
der Paramter ist wie obenstehend angegeben einzuhalten.
<node>: Nodenummer in 3D oder 4D
<flavour>: Folgende Flavours können angegeben werden: "crash",
"immediate", "direct", "normal", "hold" (Unsinn, oder?
;-), "poll". Man beachte, daß "immediate" nicht bei
BinkleyTerm funktioniert, und daß "poll" ausschließlich
bei McMail ab Gamma 5 implementiert ist.
(Ebenfalls möglich sind die Flavours FL0 bis FL9. Diese
generieren FLO-Pakete der Art 0LO bis 9LO. Dies ist in
einem Draft für einen erweiterten Binkley-Outbound vom
BT-XE-Team spezifiert, aber noch nicht konkret in die
Praxis umgesetzt ... außer in Unisched ;-)
COND: Wird diese Zeichenfolge angegeben, so wird der Poll nur
ausgeführt, wenn für die angegebene Nodenummer bereits
irgendetwas da liegt.
RDC: Abkürzung für "Reset Dial Counters". Wenn angegeben,
werden vor Anlegen des Polls alle Dial Counter, Busy Marks
u.ä. entfernt. Dies sind die Dateien <nodenetz>.$??,
.&??, .#?? und .-??. Ich hoffe, damit alle derartigen
Flags aller üblichen Mailer erschlagen zu haben ... Wenn
man das sowieso bei jedem Poll machen lassen will, kann
man, statt bei jedem einzelnen Poll RDC angeben zu müssen,
auch global "ResetDialCounters=Yes" in das Config-File
aufnehmen.
<line>: Gibt die Nummer der Line an, die den Poll ausführen soll.
Falls bei "RescanSema" (s.o.) die %-Parameter verwendet
wurden, sollte die Linenummer immer angegeben werden,
damit Unisched auf der richtigen Line den Rescan auslösen
kann (so daß der Mailer von dem Poll überhaupt was
mitkriegt). Man beachte, daß zwar der Rescan dann nur für
die entsprechende Line angelegt wird, daß man so aber
nicht verhindern kann, daß evtl. nicht doch eine andere
Line rauswählt. Ausnahme: Bei dem Flavour "Poll", der
nur von McMail unterstützt wird, wird ein spezieller
Line-Poll angelegt, der bewirkt, daß definitv keine andere
Line rauswählt.
Es ist mehr als ein LINEx-Statement zulässig, jedoch
werden zusätzliche LINEx-Statements nur zum Erstellen
zusätzlicher Rescan-Semaphoren verwednet. Ein
McMail-Taskpoll wird immer nur für die erste angegebene
Line erstellt.
Die maximale Line-Nummer beträgt 32, alles darüber gibt
einen Syntax-Error. (Wer mehr als 32 Lines fährt, ist
vermutlich neureich und kann mir gern eine größere Spende
zukommen lassen, in dem Fall erweitere ich die Anzahl der
möglichen Lines gerne <g>).
Beispiele:
$POLL_Hub = Poll 2:2476/998 crash rdc line2 line 3
Pollt im Flavour "crash" bei 2:2476/998, rescannen sollen die Lines
2 und 3. Vorher Busy-Marks und Dialcounters löschen.
$Requeste_bei_Niels = Poll 2:2476/999 immediate cond line1
Falls was für 2:2476/999 da liegt (z.B. Requests, die tagsüber mit dem
Flavour direct erstellt wurden), dort sofort mit Line 1 pollen.
REFLAVOUR <node> [<oldflavour>] [<newflavour>] [RDC] [COND] [LINE<line#>]
-------------------------------------------------------------------------
Setzt im Binkley-Outbound alle Mails für den angegebenen Node, die mit
Flavour "oldflavour" im Outbound liegt, auf den Flavour "newflavour" um.
<node>: Nodenummer in 3D oder 4D
<oldflavour>: Hier sind alle Flavours zulässig, die auch bei POLL (siehe
<newflavour>: dort) zulässig sind.
[RDC] [LINE#]: Haben beide die gleiche Bedeutung wie bei POLL (denn auch
REFLAVOUR läßt natürlich den Mailer hinterher rescannen).
[COND]: Das "Reflavouring" wird nur durchgeführt, falls bereits
Mail mit dem angegebenen neuen Flavour existiert.
Man beachte dabei, daß Unisched ungepackte Mail (?UT-Pakete) nur dann
"reflavouren" kann, wenn NOCH KEINE Mail mit dem angegebenen Zielflavour
vorhanden ist. (Falls doch, wird eine Warnung ausgegeben, und die
ungepackte Mail nicht geändert - man muß also nicht Angst haben, daß
etwas überschrieben wird). Bei Arcmail/Files (?LO-Pakete) ist das
dagegen kein Problem - Hier wird z.B. Hold-Mail auch dann auf Crash
geändert, wenn bereits CLO-Pakete existieren.
Das ganze hat zwei wichtige Anwendungsgebiete. Erstens kann man damit
Polls wieder löschen. Bsp: Du pollst um 2 Uhr Deinen GFD-Uplink an.
Falls Du jedoch bis 4 Uhr noch nicht durchgekommen bist, möchtest Du an
dem Tag nich mehr pollen (Telefongebühren ...):
$POLL_GFDnet = POLL 2:2476/999 crash
$UNPOLL_GFDnet = REFLAVOUR 2:2476/999 crash normal
#001 02:00 03:59 = $POLL_GFDnet
#002 04:00 10:00 = $UNPOLL_GFDnet
(Ich weiß, es ist blöd, daß dieses Beispiel bereits
Zeit-Event-Definitionen enthält, obwohl die erst unten behandelt werden
...
Ein weiterer möglicher Anwendungsfall ist das, was ehemaligen
Frontdoor-Sysops als "UNHOLD" bekannt ist. Wenn jemand z.B. sein System
so konfiguriert, daß es während des Billigtarifs auch für Direct-Mail
rauswählt (z.B. eine gute Möglichkeit, File-Requests in die Nacht zu
verlegen), muß er, da der Mailer nicht zwischen Normal und Direct
unterscheidet, die Echomail auch für seinen Uplink HOLD packen, weil der
sonst auch in der fraglichen Zeit immer angerufen würde, sobald für ihn
etwas auf Hold liegt. - Damit die Mail für den Uplink nun trotzdem
rausgeht, wenn man "absichtlich" bei ihm anruft, muß man vor dem Anruf
diese wieder auf "Normal" setzen:
$POLL_OLAF = POLL 2:246/9999 crash
$UNHOLD_OLAF = REFLAVOUR 2:246/9999 hold normal
$Olaf_Anrufen = $UNHOLD_OLAF $POLL_OLAF
REMOVE <filename>
-----------------
Löscht die Datei <filename>. Sinn dieses Befehls und Beispiele siehe
unter SEMAPHORE. Wildcards sind (seit der Wide Beta 07) erlaubt. Wird
kein Verzeichnispfad angegeben, wird das zuvor definierte
Semaphoren-Verzeichnis verwendet.
REQUEST <filename> [!<password>] <nodenumber> [<flavour>] [LINE<line#>]
-----------------------------------------------------------------------
Requestet beim angegebenen Node die angegebene Datei. Außer dem
Filerequest selbst wird auch ein Poll angelegt, damit der Filerequest
auch verschickt wird, daher sind die restlichen Parameter auch identisch
mit denen der Aktion POLL.
Beispiel1:
$Request_Private_Filelist = REQUEST PVTFILES !GEHEIM 9:99/999 crash 2
$Request_BLAND_Files = REQUEST FILES 2:2476/418 crash 1
RESTART
-------
Initialisiert Unisched neu. Dabei wird auch das Config-File neu
eingelesen.
SEMAPHORE <filename> ["Inhalt"]
REMOVE <filename>
-------------------------------
Die Aktion SEMAPHORE legt die Semaphorendatei <filename> an. Eine
Semaphore-Datei ist eine Datei mit Nulllänge, über die man anderen
Programmen bestimmte Dinge signalisieren kann. Über bestimmte Semaphoren
kann man z.B. das Verhalten des Mailers beeinflussen. Entsprechend
löscht die Aktion REMOVE die angegebene Datei (Vorsicht: Dies geht nicht
nur bei Semaphoren, sondern auch bei Dateien, die nicht Nullänge haben!).
REMOVE nimmt ebenso wie SEMAPHORE das Semaphore-Verzeichnis als
Standardverzeichnis.
So könnte z.B. die Sempahore BTFREEZE.01 angelegt werden, um zu
verhindern, daß der Binkley-Task Numero 1 weiterhin abhebt oder sonst
irgendwas tut. Wenn Binkley wieder aktiv werden darf, muß die von
Binkley nach dem freezing angelegte Datei BTFROZEN.01 gelöscht werden.
(Hinweis: Manchmal kann es einfacher sein, Semaphoren von der die
eigentliche Aktion ausführenden Batch aus mit ECHO>SEMAPHORE.SEM bzw.
DEL SEMAPHORE.SEM erstellen und löschen zu lassen).
Wird kein Pfadname angegeben, wird die Datei im zuvor in der Config
definierten Sempahoren-Verzeichnis angelegt.
$Freeze_BT1 = SEMAPHORE BTFREEZE.01
$Unfreeze_BT1 = REMOVE e:\mailer\bt\flags\BTFROZEN.02
Optional kann die Aktion Sempahore auch Dateien anlegen, die nicht
Nulllänge, sondern einen bestimmen Inhalt haben. In diesem Fall gibt man
der Aktion als zusätzlichen Parameter neben dem Dateinamen einen in
Anführungszeichen eingeschlossenen String mit, der in die Datei
geschrieben werden soll. Innrhalb des Strings kann mit \n ein
Zeilenumbruch, mit \" ein Anführungszeichen und mit \\ ein Backslash
erzeugt werden. Als Anwendungsbeispiel sei das Erstellen einer
Exitsemaphore für Xenia angeführt. Xenia erwartet als Inhalt der Datei
den Exitcode, den es zurückliefern soll:
$BeendeTask1MitErrorcode99 = SEMAPHORE xmexit.1 "99"
SEND <filename> <nodenumber> [<flavour>] [kfs | tfs] [LINE<line#>]
------------------------------------------------------------------
Verschickt eine Datei an den angegebenen Node. Die Parameter sind
identisch wie bei REQUEST. Zusätzlich gibt es noch:
kfs: Steht für "kill file when sent": Die Datei wird nach dem Versenden
gelöscht.
tfs: Steht für "truncate file when sent": Die Datei wird nach dem
Versand auf Nullänge gesetzt.
Beispiel:
$Send_Hubdiff = SEND 24760900.UPD 2:2476/1 crash line2
START ["<title>"] [/option ...] <program> <parameter> ...
---------------------------------------------------------
Die Aktion START steht nur unter OS/2 zur Verfügung. Sie startet ein
Programm direkt in einer eigenen Session. Im Unterschied zu EXEC wird
also nicht Unisched angehalten und eine Befehlszeile an den
Kommandoprozessor übergeben und auf deren Abarbeitung gewartet, sondern es
wird eine unabhängige Sitzung aufgemacht.
START hat "im Wesentlichen" die gleiche Syntax wie der OS/2 START Befehl
("help start" eintippen ...) und sollte sich auch genau so verhalten.
Trotzdem hier noch mal eine vollständige Liste:
<title> Ein Titel für die Fensterliste und den Titelbalken eines
Fensters (falls vorhanden).
<program> <parameters ...>
Das Programm, Batchfile oder Skript, das aufgerfuen werden soll.
Mögliche Werte für <option> (Einzelne Optionen können direkt oder durch
Leerzeichen getrennt aneinandergehängt werden) finden sich unten. Man
sollte über die Optionen vollständig spezifizieren, was man haben möchte.
Alle Optionen haben auch Defaultwerte, teilweise hängen die aber (dank der
Kompatibilität zu START ...) wieder von den Einstellungen anderer Optionen
ab, und das ganze ist recht undurchsichtig. Deshalb lieber explizit die
gewünschte Optoin setzen.
- Sitzungsart: Einer der folgenden Parameter sollte gesetzt sein:
/FS OS/2 Vollbild-Sitzung
/WIN OS/2 Fenster
/PM PM-Anwendung
/DOS/WIN DOS-Anwendung im Fenster
/DOS/FS DOS Vollbild-Sitzung
- Vordergrund/Hintergrund: Einer der folgenden Parameter sollte gesetzt
sein (die Defaults hängen von der Sitzungsart ab, und das kann sich eh
keiner richtig merken):
/F Im Vordergrund ausführen
/B Im Hintergrund ausführen
- Fenstergröße: Die folgenden Parameter sind optional:
/MAX Fenster in maximaler Größe starten.
/MIN Fenster minimiert (versteckt / als Icon) starten.
- Startart: Einer der folgendne Parameter sollte gesetzt sein
(Ausnahme: Bei /DOS darf keiner dieser Parameter gesetzt werden)
/N Programm direkt starten. Die Sitzung wird nach
Beendigung des Programms geschlossen. Diesen Parameter
für das Starten von .EXE-Dateien verwenden.
/C Programm über die Kommandoshell starten. Diesen Parameter
verwenden, wenn eingebaute Befehle (dir o.ä.) oder
.CMD-Dateien (Batchfiles oder REXX-Skripte) ausgeführt
werden. Diese Benötigen die Shell (CMD.EXE) zur
Interpretation. Die Sitzung wird nach Beendigung des
Befehls / des Skripts geschlossen.
/K Wie /C, jedoch bleibt die Sitzung nach
Beendigung des Befehls oder Skripts offen.
- Environment-Variablen: Dieser Parameter ist optional:
/I Normalerweise sieht das Programm genau die Umgebungs-
variablen, die auch Unisched kennt. Setzt man den /I
Parameter, so kennt das Programm in der Sitzung nur die
Umgebungsvariablen, die auch ein "frisches" OS/2-Fenster
kennen würde.
Beispiele:
$Tosser = START "Tossertask" /WIN/MIN/B/C e:\tools\toss.cmd
;Starten des Tossertasks als minimiertes OS/2 Fenster im Hintergrund.
;Da es sich um ein Batchfile handelt, muß dieses mit /C über den
;Kommandoprozessor gestartet werden.
$Fileindex = START /DOS /FS /B e:\proboard\pbutil.exe fi
;Ein DOS-Programm als Vollbild starten. Um zu verhindern, daß in den
;Vollbild-Modus geschaltet wird, ist der /B Parameter wichtig.
$Konfigfile_Editieren = START /PM/F/N c:\os2\e.exe e:\usched\unisched.cfg
;So kann man "on the fly" das Config-File editieren. Später (bei den
;Triggerfiles) werden wir sehen, wie man Unisched veranlassen kann,
;dieses nach einer Änderung auch automatisch wieder einzulesen
Eins sollte man beim Starten von Sessions aber im Hinterkopf behalten:
Da diese unabhängig von Unisched laufen, kann und wird Unisched u.U.
mehrere Sessions gleichzeitig starten. Wenn man also eine Session
konfiguriert, die immer dann startet, wenn Mail vom Mailer eingegangen
ist, kann es passieren, daß die toss.cmd zweimal gleichzeitig läuft.
Dann müssen entweder die in der toss.cmd aufgerunfenen Programme oder
aber die toss.cmd selbst dafür Sorge tragen, daß das zu keinen Problemen
führt. Wem das zu kompliziert erscheint, der sollte seine toss.cmd
besser über die Aktion EXEC starten.
3.3.2 Rekursionen
-----------------
Bei der Definition von ACTIONS sind übrigens auch Rekursionen zulässig.
Beispiel:
$Tobias_Pollflag = POLL 2:2476/418 crash
$Tobias_Unhold = REFLAVOUR 2:2476/418 hold normal
$Tobias_Anrufen = $Tobias_Unhold $Tobias_Pollflag
Die Reihenfolge der Defintion im Config-File ist beliebig, die letzte Zeile
im obigen Beispiel hätte also durchaus auch als erste dastehen können.
3.3.3 EVENTS
------------
So, jetzt haben wir bereits Aktionen definiert, die Unisched u.U. ausführen
soll, und ihnen Namen gegeben. Jetzt müssen wir nur noch festlegen, *WANN*
Unisched diese Aktionen ausführen soll:
Es gibt vier mögliche Bedingungen (Ereignisse, EVENTS): Semaphore-Dateien,
statische Zeit-Events, periodische Events und Funktionstasten.
Funktionstasten
---------------
Syntax: Key<key> = $<action name> [$<action name> .. $<action name>]
Dies ist die einfachste Sorte von Event. Sie dient dazu, daß man alle
von Unisched verwalteten Funktionen auch von Hand über eine
Funktionstaste starten kann. Derzeit definiert sind folgende Tasten:
KeyF1 .. KeyF10
KeySF1 .. KeySF10 (SF steht für Shift+Fkt.)
KeyAltA .. KeyAltZ (Ausnahme: Alt+X, damit wird nämlich Unisched beendet)
KeyAlt0 .. KeyAlt9
KeyS0 .. KeyS9 (Shift + 0 .. Shift + 9)
Key0 .. Key9
KeyESC
Bsp.:
KeyF3 = $Mail_Exportieren
KeyAltI = $Mail_Importieren $WAV_Abspielen
Semaphore-Dateien
-----------------
Es gibt seit wb06 zwei verschiedene Semaphore-Typen: Flagfiles (die
konventionellen Semapohoren) und Triggerfiles.
Flagfiles ("normale Semaphoren")
--------------------------------
Syntax: *<path+filename> = $<action name> [$<action name> ... ]
Wenn Unisched die Datei <path+filename> vorfindet, löscht es sie und
führt anschließend die angegebene Aktion aus. Wenn der Pfadname nicht
mit angegeben wird, wird die Datei in dem durch SemaDir (s.o.)
bezeichneten Verzeichnis gesucht.
Bsp.:
*e:\box\sema\MAILIN.SEM = $MAIL_Importieren
Hauptzweck der Flagfile-Funktion ist es wohl, den Tosser zu starten,
wenn Mail eingegangen ist. Dazu muß man den Mailer dazu überreden, bei
Maileingang die besagte Semaphore-Datei anzulegen. Schau' dazu in die
Doku Deines Mailers. Bei McMail und Binkley XE (nur XE!) heißt das
zugehörige Schlüsselwort "MailFlag", wobei man dann noch im Event-File
den Errorlevel für Mail-Exits auf 0 setzen muß (McM) bzw. den Eintrag
für den Mail-Exit-Level ganz löschen muß (BTXE). Bei Binkley XE heißt
die Datei immer BTMAIL.IN, bei McMail kann man den Namen frei
definieren).
Bei anderen Mailern muß man es, findet man keine entsprechende
Funktion, notfalls über die Mailerbatch machen: Jeder Mailer kann sich
nach Maileingang mit einem bestimmten Errorlevel beenden, und in der
Batch kann man dann mit z.B. ECHO > MAILIN.SEM die Semaphore-Datei von
Hand anlegen.
Triggerfiles ("daskannurunischedundsonstkeiner <g>")
----------------------------------------------------
Syntax: ^<path+filename> = $<action name> [$<action name> ... ]
Im Gegensatz zu Flagfiles werden Triggerfiles von Unisched NICHT
gelöscht, bevor die Aktion ausgeführt wird. Bei Triggerfiles muß die
aufgerufene Aktion (normalerweise eine Batch) selbst dafür sorgen, daß
die Datei gelöscht/woandershin verschoben wird.
Ein typisches Anwendungsbeispiel: Man läßt durch ein zeitgesteuertes
Event (s.u.) regelmäßig eine Fileliste requesten und möchte diese,
sobald sie eingetroffen ist, automatisch entpacken und in ein anderes
Verzeichnis verschieben lassen:
^e:\mailer\inbound\24760999.zip = $Fileliste_von_999_Entpacken
Es ist übrigens problemlos möglich, daß die betreffende Aktion ein
externes Programm in einer Hintergrundsitzung startet und sich mit dem
Löschen der Datei Zeit läßt. Unisched ist nicht braindead - er wird
NIEMALS für die SELBE Trigger-Datei zweimal die gleiche Aktion starten.
Nachdem er erstmalig für eine Trigger-Datei eine Aktion gestartet hat,
reagiert er zunächst nicht mehr auf Dateien diesen Namens im Inbound.
Kriterium, damit Unisched auf das Auftreten einer Triggerdatei besagten
Namens wieder reagiert, ist, daß die Datei zwischenzeitlich entweder
verschwunden gewesen sein muß oder zumindest ihr Dateidatum/Dateilänge
geändert hat.
Ferner wird Unisched auch nie auf eine Trigger-Datei reagieren, solange
diese nicht für Schreibzugriffe zugänglich ist. Somit ist es - so Dein
Mailer File-Sharing unterstützt, was heute die meisten tun - problemlos
möglich, als Trigger-File direkt eine Datei im Mailer-Inbound
anzugeben; Unisched wird auf diese erst reagieren, wenn sie vollständig
empfangen wurde.
Und schließlich unterstützt das Triggerfiles-Feature auch Wildcards
(Jokerzeichen). Dabei werden alle auf das Wildcard passende
Triggerfiles als Einheit betrachtet. Will heißen: Wenn Unisched auf
eine bestimmte Datei reagiert hat, reagiert es auf beliebige auf das
Wildcard passende Dateien solange nichtmehr, bis die Datei, auf die er
ursprünglich reagiert hatte, gelöscht/wegverschoben wird oder ihr
Dateidatum ändert.
Je nach Anwendung sollte daher die Aktion, die durch ein Triggerfile
ausgelöst wird, dieses File nach Beendigung löschen bzw. woanders hin
verschieben. Falls in der Triggerfiledefinition Wildcards vorkommen,
ist das ein Muß. Es gibt aber andererseits auch Fälle, in denen dies
nicht erforderlich ist. Z.B. könnte man über Triggerfiles auch
Unisched dazu bewegen, daß er, wenn man mit einem externen Editor das
Config-File ändert, nach dem Abspeichern desselben das File automatisch
neu einliest. Beim Abspeichern wird nämlich das Dateidatum des
Configfiles aktualiesert, und das reicht ja schon, um ein Triggerfile
zum Auslösen des Events zu veranlassen:
$Configfile_Neu_Einlesen = RESTART
^e:\usched\unisched.cfg = $Configfile_Neu_Einlesen
invertierte Flagfiles ("invertierte normale Semaphoren")
--------------------------------------------------------
Syntax: !*<path+filename> = $<action name> [$<action name> ... ]
Die genaue Umkehrung eines Flagfiles. Die Aktion(en) wird/werden
ausgelöst, wenn die Datei <path.filename> nicht existiert. Unisched
erstellt die Datei daraufhin sofort selbst wieder neu.
Dieses Feature läßt sich z.B. um von einem anderen Programm aus zu
kontrollieren, ob Unisched noch "am Leben ist". Hierzu wird nicht mal
eine spezielle Aktion benötigt. Bsp.:
!*e:\flags\unisched.alv = IGNORE
(Anmerkung für Fortgeschrittene: Wir haben hier nicht erst einen
Aktionsnamen deklariert a la "$Tue_Nichts = IGNORE", sondern hinter das
Gleichheitszeichen direkt den gewünschten Aktionsbefehl geschrieben.
Das ist überall zulässig - überall, wo man einen Aktionsnamen mit $
hinschreiben kann, kann man stattdessen auch direkt einen Aktionsbefehl
hinschreiben.)
invertierte Triggerfiles
------------------------
Syntax: !^<path+filename> = $<action name> [$<action name> ... ]
Hier wird wie folgt vorgegangen: Die Aktion(en) wird/werden ausgelöst,
wenn die angegebene Datei nicht exisitert. Anschließend wird die
Aktion so lange nicht wieder ausgelöst, wie die Datei verschwunden
bleibt. Unisched registriert intern, wenn die Datei erneut erscheint,
und erst, wenn sie nach einem erneuten Erscheinen anschließend dann
wieder verschwindet, wird die Aktion wieder ausgelöst.
Wildcards sind hier nicht zulässig.
Praktisches Anwendungsbeispiel: Weiß jemand eines? ;)
Statische Zeitgesteuerte Events
-------------------------------
Die Bezeichnung "statisch" dient der Unterscheidung mit den weiter unten
erläuterten periodischen Events. Statische Events sind am ehesten mit
dem vergleichbar, was man auch von den eingebauten Schedulern vieler
Mailer her kennt. Allerdings handhabt Unisched auch die statischen
Events etwas anders (besser! ;-) als die meisten Mailer.
Erfahrungsgemäß verursacht dies zunächst leichte Verständnisprobleme ...
lies Dir bitte die Doku sorgfältig durch, bevor Du damit rumspielst. ;-)
Syntax:
#<nr> <from> <to> [<weekday>] [<fromdate> <todate>] [even|odd] = $<action>
<nr>: Nummer des Events, anhand derer Unisched bestimmt, ob das Event
schon ausgeführt wurde oder nicht. Diese Nummer dient
lediglich dazu, das Event eindeutig zu identifizieren. Die
Nummern müssen nicht aufeinanderfolgend sein, es muß auch keine
Reihenfolge eingehalten werden (ein Event, das später kommt,
darf problemlos eine niedrigere Nummer haben) - das einzige,
was man beachten muß, ist, daß man nicht zwei Events die
gleiche Nummer geben darf (sollte ...), und daß die Nummer
kleiner als 1000 sein muß, also i.d.R. dreistellig angegeben
werden sollte.
Wenn man an der Config was ändert, sollte man gleichbleibende
Events nicht umnumerieren, ansonsten werden sie nämlich an dem
Tag, an dem man an der Config rumbastelt u.U. nochmal
ausgeführt.
<from>,
<to>: Die Start- und End-Uhrzeit des Events. Unisched verhält sich
hier grundlegend anders als die Braindead-Scheduler einiger
Mailer. Unisched stellt sicher, daß die angegebene Aktion
innerhalb der angegebenen Zeitspanne *genau* einmal ausgeführt
wird. Solche Effekte, daß der Tosser zwanzig Mal gestartet
wird, weil innerhalb der Zeitspanne, innerhalb derer er
eigentlich nur einmal gestartet werden soll, was anderes
passierte, der Mailer runterfuhr, das Event dann neu startete
und damit auch den Tosser nochmal, etc, pp., - solche Effekte
gibt es mit Unisched nicht. Deshalb kann man die Zeitspanne
ruhig schön groß wählen. Wenn z.B. um 05:00 eine Statistik
generiert werden soll, und es von eminenter Wichtigkeit ist,
daß die Statistik auf jeden Fall erstellt wird, wähle man als
Zeitspanne einfach 05:00 24:00 - dann wird die Statistik mit
großer Wahrscheinlichkeit irgendwann erstellt werden, selbst,
wenn der um 04:30 gestartete Tosser mal 3 Stunden statt 30
Minuten brauchen sollte.
Und hier nochmal für alle, die prinzipiell nur das
Fettgedruckte lesen:
ES MACHT FAST NIE SINN, EINE ZEITSPANNE VON NUR EINER MINUTE
ZU DEFINIEREN. ES IST FAST IMMER BESSER, EINE ZEITSPANNE ZU
DEFINIEREN, DIE SCHOEN GROSSZUEGIG BIS ZUM TAGESENDE LAEUFT,
WEIL DANN DAS EVENT EVTL. NACHGEHOLT WERDEN KANN.
Und hier nochmal für die, die von gewissen hirntoten
Mailer-Schedulern verdorben sind:
EVENT-ZEISPANNEN VERSCHIEDENER EVENTS DUERFEN SICH
UEBERLAPPEN, UNISCHED HAT DAMIT ABSOLUT KEIN PROBLEM.
Um darüber auf dem Laufenden zu bleiben, was bereits
ausgeführt wurde und was noch nicht, verwendet Unisched die
Datei UNISCHED.DAY, die es im aktuellen Verzeichnis anlegt.
Es ist daher keine gute Idee, diese Datei zu löschen.
(Ausnahme: Du hast den Eindruck, daß Unisched überhaupt nicht
das tut, was Du konfiguriert hast - in dem Fall ist es
möglich, daß die DAY-Datei kaputt ist, und Du kannst mal
probieren, sie zu löschen, vielleicht hilfts).
Die Zeitspanne darf auch die 24:00-Grenze überschreiten,
Unisched hat damit kein Problem. (Seit der wb05 wirklich
nicht mehr ;-)))
<weekday>: Defaultmäßig wird die Aktion an jedem Wochentag ausgeführt.
Hier kann man aber explizit einen oder mehrere Wochentage
angeben, an denen die Aktion ausgeführt werden soll (wenn
mindestens ein Wochentag angegeben wird, wird die Aktion an
allen nicht angegebenen Tagen nicht ausgeführt). Die Tage
werden auf Deutsch oder Englisch in
Zwei-Buschstaben-Abkürzungen angegeben: Mo Di Mi Do Fr Sa So
oder Mo Tu We Th Fr Sa Su. Ebenfalls möglich sind die
Abkürzungen "Week" (für Mo-Fr) und "WkEnd" (für Sa+So). Bei
Events, die die 24:00-Grenze überschreiten, wird als Wochentag
der Wochentag *nach* 24:00 genommen!
<fromdate>,
<todate>: Normalerweise wird die Aktion an jedem Tag im Monat
ausgeführt. Hier kann man optional angeben, daß die Aktion
nur zwischen zwei bestimmten Daten gestartet werden soll. Die
Daten können entweder als Tagesnummern, als Kombinationen aus
Tag und Monat, oder aus voll spezifizierten Daten mit Tag,
Monat und vierstelliger Jahreszahl bestehen. Beispiele:
01. 01. ; Event am 1. jeden Monats ausführen
24. 31. ; Event an jedem Tag vom 24. an ausführen
20. 05. ; Event an jedem Tag vom 20. eines Monats
; bis einschließlich dem 05. des Folgemonats
; ausführen
21.06. 22.09. ; Event nur im Sommer (jeden Jahres) ausführen
24.12. 06.01. ; Event nur während der Weihnachtsferien
ausführen
01.01.2000 01.01.2000 ; Event nur am 1.1.2000 ausführen
Wie aus den Beispielen zu erkennen ist, muß immer ein ganzer
Datumsraum, bestehend aus Anfang und Ende, angegeben werden.
Will man das Event nur an einem bestimmten Tag ausführen, muß
das Ende des Datumsraums das gleiche sein wie der Anfang
(s.o., 01. 01.).
even, odd: Wenn das Wörtchen "even" oder "odd" in der Eventdefintionszeile
erscheint, wird das Event nur ausgeführt, wenn die aktuelle
Wochennummer gerade (even) bzw. ungerade (odd). Nützlich, wenn
man z.B. etwas im 14-Tage-Rhytmus tun will. Für diesen Zweck
muß zusätzlich zu "even" oder "odd" natürlich noch ein
Wochentag angegeben werden, da sonst das Event an *jedem* Tag
in den geraden bzw. ungeraden Wochen ausgeführt würde.
<action>: Der Name der Aktion wie zuvor definiert.
Beispiele:
#010 00:00 24:00 01. 01. = $Statistik
#020 00:00 04:00 = $Exportieren
#030 04:05 04:55 Mo We Fr = $POLL_THOMAS
#040 04:10 04:55 = $POLL_Hub
#050 12:00 13:00 Mo even = $Preisliste_in_KOMMERZ_GER_Posten
#060 08:00 24:00 01.06. 22.06. = $Tobias_Hat_Demnächst_Geburtstag
Periodische Events
------------------
Periodische Events dienen dazu, bestimmte Aktionen regelmäßig durchführen
zu lassen. Beispielsweise könnte man alle 15 Minuten ein REXX-Skript
aufrufen lassen, das überprüft, ob noch alle Mailer-Tasks oben sind, und
falls nicht, diese neu startet (oder den Rechner neu bootet, je nach
Gesachmack). Ein anderes Anwendungsgebiet wäre, z.B. alle xx Minuten
automatisch Netmail exportieren zu lassen.
Syntax:
#<nr> ~<min> [+<sync> | -<sync>] [exact] [<from> <to>] [<weekday[s]>]
[<fromdate> <todate>] = $<action[s]>
<nr>: Wie oben eine Nummer im Bereich von 1 bis einschließlich 999,
aufgrund derer das Event identifiziert wird, nicht mehr und
nicht weniger.
<min>: Nach so viel Minuten wird die Aktion erneut ausgeführt.
ACHTUNG: Wenn man die Periodendauer eines bereits bestehenden
Events ändert, sollte man wie folgt vorgehen: Event
auskommentieren, Konfig neu einlesen, Semikolon wieder
entfernen, neue Periodendauer einstezen, Konfig nochmal neu
einlesen. Ansonsten kann es passieren, daß die ersten zwei,
drei Ausführungen des Events zu falschen Zeiten kommen. Wenns
doch passiert, zur Not das DAY-File löschen (s.u.).
<+sync>: Normalerweise werden periodische Events an 0:00 Uhr
<-sync>: synchronisiert, d.h., die projektierten Ausführungszeiten
liegen dann bei 0:00 Uhr + n * Periodendauer. Diese
Synchronisation kann man mit "+<minutenzahl>" nach "später"
oder mit "-<minutenzahl>" nach "früher" verschieben. Sinn
macht das, wenn man viele Aufgaben regelmäßig ausführen läßt,
und es dann z.B. bei 60-minütigen Periodendauern immer zur
vollen Stunde zu einem regelrechten "Eventstau" kommt.
exact: Normalerweise holt Unisched die Ausführung des periodischen
Events nach, wenn er sie nicht genau zur synchronisierten
Ausführungszeit starten kann. Dies ist in den meisten Fällen
sinnvoll (z.B. ist es bei Mail-Export-Events nicht so wichtig,
wann genau sie ausgeführt werdne, nur, DASS sie mindestens
einmal pro xx Minuten ausgeführt werden), manchmal kann es aber
nerven, z.B., wenn man zu bestimmten Uhrzeiten einen Gong
abspielen will o.ä. Die Angabe der Zeichenfolge "exakt" in der
Event-Definition bewirkt, daß das periodische Event NICHT
nachgeholt wird, falls es nicht genau zur synchronisierten Zeit
ausgeführt werden kann.
Die übrigen Parameter haben genau die gleiche Syntax wie bei statischen
Events, jedoch haben sie eine etwas andere Bedeutung. Die <from> und
<to> Uhrzeiten geben hier nur eine Zeitspanne an, innerhalb derer das
Event ausgeführt werden darf. Je nachdem, wie die Periode gewählt ist,
könnte das Event innerhalb dieser Zeitspanne aber auch mehr als einmal
ausgeführt werden. Bitte lies Dir auch den Text unter den Beispielen
sorgfältig durch, um das zu verstehen!
Bsp.:
#510 ~60 -10 = $Exportieren
;Exportiert immer um 10 Minuten nach der vollen Stunde (oder später,
;falls es geanu zu dem Zeitpunkt nicht klappt)
#520 ~60 exact 08:00 20:00 Week Sa = $Stundengong
;Ein "Kuckuck", aber nur, wenn es wirklich genau die volle Stunde ist.
;außerdem ist unser Kuckuck in der Nacht (von 21:00 bis 07:00) und
;Sonntags abgeschaltet, der lieben Nachbarn wegen :-)
#530 ~60 +30 exact 08:00 20:00 Week Sa = $Halbstundengong
;Ebenso, aber immer nur zur halben Stunde und NICHT zur vollen
Wie genau behandelt Unisched nun periodische Events? Zunächst einmal
synchronisiert Unisched ein neu definiertes Event mit 00:00h (oder einer
entsprechend verschobenen Zeit, s.o.) des aktuellen Tages. Wird also ein
viertelstündliches Event definiert, wird dieses auch immer genau um
xx:00h, xx:15h, xx:30h und xx:45h ausgeführt. Etwas wirr wird dies nur,
wenn man eine Zeitspanne definiert, die kein Teiler von 1440 (der Zahl
der Minuten eines Tages) ist. Z.B. 27 Minuten. Dann sind von Tag zu Tag
die Ausführzeiten unterschiedlich ...
Kann Unisched zur synchronisierten Zeit das Event nicht ausführen, weil
er down ist oder ein Event mit höherer Priorität startet, wird das
periodische Event nachgeholt - aber nur solange, bis bereits die nächste
Instanz dieses periodischen Events fällig wäre. So wird vermieden, daß
es einen Stau von Events gibt, wenn man ein Event definiert, das jede
Minute ausgeführt werden soll, das aber 10 Minuten dauert ...
Will man das Nachholen von periodischen Events ganz unterdrücken, muß man
die Zeichenkette "exact" in die Definition einfügen. Dies ist aber
wirklich NUR für Stunden-Gongs o.ä. geeigenet - alles, was irgendwie
wichtig ist, sollte man auf jeden Fall nachholen lassen.
Die Parameter from, to, weekdays, fromday etc. pp. definieren einen
Zeitrahmen, in dem das Event ausgeführt werden darf. An der Behandlung
und Synchronisation ändert sich dadurch gar nichts - Unisched arbeitet
das alles durch, und erst, wenn es so weit ist, das Event genau jetzt
auszuführen, wird geprüft, ob die aktuelle Uhrzeitn dem erlaubten
Zeitrahmen liegt oder nicht und evtl. die Ausführung unterlassen.
Um diese etwas theoretische Ausführungen zu verdeutlichen, einfach ein
paar Beispiele. Nehmen wir das folgende viertelstündliche Event:
#123 ~15 14:50 17:25 = $Tue_Was
Dieses Event wird erstmals um 15:00h ausgeführt. Um 15:10 startet
Unisched ein anderes Event, das bis 15:20 dauert. Die nächsten
Ausführzeiten des periodischen Events 123 sind nun: 15:20 15:30 15:45
etc. Das Event um 15:15 hat sich also auf 15:20 verschoben. - Um 15:50
startet Unisched wieder ein anderes Event, das bis 16:47 dauert. Die
weiteren Ausführzeiten sind nun 16:47 17:00 17:15. Die Events um 16:00,
16:15 und 16:30 sind also unter den Tisch gefallen. Das Event um 16:45
hat sich auf 16:47 verschoben. Das Event um 17:30 liegt außerhalb des
erlaubten Zeitrahmens.
So, nun viel Spaß beim Einrichten. Falls Du Probleme hast, die auch nach
mehrmaligem Durchlesen der Doku sich nicht lösen, kannst Du Dich gerne bei
mir melden. Siehe dazu Kapitel 6.
3.4 AUFRUF UND BEDIENUNG
------------------------
Unisched wird einfach durch Aufruf von UNISCHE2.EXE bzw. UNISCHED.EXE
gestartet. Dabei wird dann die Datei UNISCHED.CFG (ausschließlich!) in dem
Verzeichnis gesucht, in dem sich die .EXE-Datei befindet. Ein anderer Ort
oder anderer Namen der Konfigurationsdatei kann mit dem Parameter
/c<filename> angegeben werden.
In diesem Verzeichnis legt Unisched unter dem Stammnamen der Config-Datei
(also i.d.R. UNISCHED) noch ein paar weitere Dateien an:
UNISCHED.DAY Enthält Informationen des Schedulers darüber, welche Events
heute schon wann gestartet wurden. Löscht man diese Datei,
während Unisched nicht läuft, werden beim nächsten Startup
alle noch ausführbaren Events nachgeholt. - Manchmal kann
es nützlich sein, Unisched herunterzufahen, diese Datei zu
löschen, und Unisched wieder zu starten. Insbesondere
dann, wenn Unisched periodische Events zu anderen Zeiten
ausführt als gedacht.
UNISCHED.ACT Enthält einen Dump des Logfensters mitsamt dem
Backscrollpuffer und kann jederzeit problemlos gelöscht
werden. (Es ist aber nicht erforderlich, diese Datei zu
löschen, im Gegensatz zu gewissen anderen Produkten, die
gelegentlich aus dem Tritt kommen, wenn das Activity-File
korrupt ist ... <g>).
UNISCHED.BSY Semaphore-Datei, die anzeigt, daß Unisched bereits (mit der
dazugehörigen Config-Datei UNISCHED.CFG) läuft. Unisched
startet dann bei einem erneuten Aufruf nicht. Es ist somit
eine gute Idee, diese Datei während des Systemstartvorgangs
vorsorglich löschen zu lassen. Falls der Rechner mal
während Abwesenheit neu bootet oder so ...
Bsp: UNISCHED /Ce:\configs\usched1.cfg
Startet Unisched mit der Konfigurationsdatei e:\configs\usched1.cfg. Die
restlichen Dateien nennt Unisched dann entsprechend e:\configs\usched1.day,
usched1.act und usched1.bsy.
Wenn sich ein grundlegender Fehler in der Config befindet, startet Unisched
nicht, sondern gibt (mittlerweile <g>) einen sauberen Log-Dump aus (die
Fehlerursache steht meist fast ganz unten) und wartet 30 Sekunden auf einen
Tastendruck, bevor es sich beendet. Behebbare Fehler während der Ausführung
(Tippfehler in Event-Definitionen) werden gelogged, ohne daß sich Unisched
beendet.
Ist Unisched einmal gestartet, sieht man oben eine Liste mit belegten
Funktionstasten (genaugenommen sind nur die Funktionstasten aufgeführt, die
der User selbst definiert hat), gefolgt von einer Anzeige, die angibt,
welche statischen bzw. periodischen Events als nächstes mit der Ausführung
dran sein werden, und schließlich (der normalerweise größte Teil des
Fensters) folgt das Logfenster, in dem Events (Auslösende Ursachen von
Aktionen) und Aktionen (was so passiert) bei ihrem Auftreten aufgelistet
werden.
Zur Bedienung von Unisched ist nicht viel zu sagen. Die folgenden Tasten
sind vorbelegt und können nicht verändert werden:
Alt+X Unisched benden.
Cursor Hoch: Das Logfenster um eine Zeile nach oben (zurück) scrollen.
Cursor Runter: Das Logfenster um eine Scrolle nach unten (wieder vorwärts)
scrollen.
Page Up: Das Logfenster um eine ganze Seite zurückscrollen.
Page Down: Das Logfenster um eine ganze Seite vorwärtsscrollen.
Home (Pos1): Ganz an den Anfang (zum ältesten Eintrag) des Logfensters
springen.
End (Ende): Ganz ans Ende (zum aktuellsten Eintrag) des Logfensters
springen.
Unter OS/2 kann man Unisched neuerdings auch durch Klick auf den
Close-Button sauber beenden; ebenso beendet sich Unisched beim
Systemabschluß korrekt. Dummerweise muß man jedoch vorher immer noch eine
Bestätigungsmeldung des Betriebssystems ("Diese Sitzung enthält eventuell
...") wegklicken. Wen dies stört, der kann diese Meldung unter Warp 4 im
Systemobjekt, Notepad "Bestätigungen", generell abschalten (gilt dann auch
für andere VIO-Programme). Unter Warp 3 kann man ein Tool namens "SendYes"
verwenden, um den gleichen Effekt zu erhalten.
Weitere Tasten sind in Unisched nicht belegt. Alle anderen Funktionen
können bzw. müssen mit Hilfe der KeyXXX-Statements in der Config selbst
erzeugt werden. Beispiele:
Eine DOS-Shell gefällig?
KeyAltJ = EXEC COMMAND.COM bzw.
KeyAltJ = EXEC CMD.EXE
Konfiguration aus Unisched heraus editieren?
$EditConfig = EXEC c:\msdos\edit.exe e:\mailer\sys\unisched.cfg
$ReadConfig = RESTART
$Konfigurieren = $EditConfig $ReadConfig
KeyAltC = $Konfigurieren
Die Möglichkeiten sind unbegrenzt.
4. UNISCHED FUER FORTGESCHRITTENE
---------------------------------
4.1 Online-Tossing
------------------
4.1.1 - Was ist Online-Tossing?
Normalerweise erhältst Du von Deinem Uplink z.B. zwei 2 MB-Pakete in einem
Poll. Erst wenn sämltiche Pakete komplett empfangen sind und die Session
beendet ist, wird Dein Tosser gestartet. Die Zeit, bis die Mail komplett
für Downlinks von Dir zur Verfügung steht, ist also die Zeit, die für den
Transfer benötigt wird, plus die Zeit, die fürs Tossen benötigt wird.
Ruft Dein Downlink schon an, während Du noch die letzten 50 KB von den 4
MB transferierst, bekommt er - NICHTS.
Mit Online-Tossing bittest Du Deinen Uplink, Dir mehrere kleine Pakete
(z.B. 10 400K - Pakete) zu schicken. Mit modernen Tossern ist das kein
Problem. Unisched überwacht kontinuierlich Deinen Inbound. Sobald dort
ein Mailpaket *komplett empfangen* bereitliegt, startet er Deinen
Tossertask. Dieser kann nun das erste / die ersten Pakete schon eintossen
und bereitlegen, während der Mailer die restlichen Pakete transferiert.
Solange der Tosser dies tut, setzt Unisched die Inbound-Überprüfung aus
(kann aber sonstige Funktionen, wie Polls generieren, weiterhin
ausführen). Erst, wenn er von dem gestarteten Tossertask signalisiert
bekommt, daß er fertig ist, schaut er wieder in den Inbound und startet
den Tosser ggf. erneut. Wenn Dein Downlink nun anruft, während Du die
letzten 50 KB von den 4 MB transferierst, bekommt er bereits 3.6 MB
mitgesendet.
4.1.2 - Systemanforderungen für Online-Tossing.
1. Du solltest Dich mit Unisched und Deinem System schon gut auskennen.
Begriffe wie Semaphore-Datei, Unprotected Inbound, Maximum Pack Ratio,
Badmail etc. sollten bei Dir keine Bauchschmerzen hervorrufen.
2. Dein Mailer muß File-Sharing unterstützen, d.h. Pakete während des
Empfangs mit SH_DENYALL öffnen. Ansonsten kann Unisched nicht
erkennen, ob das Paket bereits empfangen ist, oder nicht.
3. Dein System muß einwandfrei multitaskingtauglich sein.
4. Der Tosser muß einwandfrei konfiguriert sein.
Bemerkungen zu 2.: Getestet habe ich selbst McMail, Binkley XE und
Cantaloup. McMail 1.0g5 hatte kein Problem. Binkley XE unterstützt
File-Sharing in allen Versionen außer den DOS-Versionen XR1 und XR2. Die
OS/2-Versionen und die DOS-Versionen ab XR3 sind kein Problem. Cantaloup
war auch unproblematisch. Zu beachten ist, daß man unter DOS das Programm
SHARE.EXE laden muß, um File-Locking-Support zu erhalten. Ob Dein Mailer
Online-Tossing-tauglich ist, kannst Du wie folgt herausfinden: Requeste
Dir ein großes File, das ein bißchen zur Übertragung braucht. Versuche
nun, bereits während der Übertragung dieses File mit TYPE anzuzeigen oder
sonstwie zu lesen. Dabei mußt Du eine SHARING VIOLATION als Fehlermeldung
erhalten. Kriegst Du das nicht, ist Dein Mailer / Dein Betriebssystem /
Dein Netzwerk nicht geeignet. Ich bitte hierbei um Rückmeldung, welche
Mailersoftware hier außer der von mir getesteten problemlos ist und
insbesondere, welche *nicht* problemlos ist.
Bemerkungen zu 3.: Heutzutage schimpft sich ja fast jedes Betriebssystem
und vieles, wo "Betriebssystem" auf der Packung steht,
multitaskingtauglich. Es ist dann meist auch kein allzugroßes Problem,
eine kleine Zwei-Line-BBS zu fahren mit einem Background-Tossertask. In
den meisten Fällen läuft der Tossertask ja eh nicht während eines
Transfers, und wenn doch, sind kurzfristige geringfüge Rückgänge in der
cps-Rate ja nicht so tragisch. Mit Online-Tossing forcierst Du aber
geradezu, daß praktisch während der ganzen Transferzeit grundsätzlich
immer der Tosser läuft. Sagen wir, daß das einen Rückgang der cps-Rate um
300 cps bedingt, dann verursachst Du durch Einsatz des Online-Tossing
Deinen Downlinks nicht von der Hand zu weisende Mehrkosten.
Ideal geeignet für den Einsatz von Online-Tossing ist ein System mit
folgenden Merkmalen: 80486dx2-66, SCSI, FIFOs, aktive ISDN-Adapter, OS/2
Warp 3 mit nativen OS/2-Mailern, einem nativen OS/2-Tosser und Ray Gwinns
SIO als Schnittstellentreiber. Eine derartige Konfiguration ist in der
Lage, Online-Tossing auch im Multilinebetrieb ohne den geringsten Einfluß
auf die cps-Rate durchzuführen. Bei allen anderen Konfigurationen kann
ich keinerlei Garantien abgeben. Möglicherweise geht es auch, aber das
mußt Du selbst herausfinden.
Bemerkungen zu 4: Du mußt ABSOLUT sicherstellen, daß Dein Tosser ALLE
PKTs im Inbound und im Protected Inbound sowie ALLE Arcmail-Pakete im
Protected Inbound ENTFERNT. Wenn er ein Archiv nicht entpacken will oder
kann, muß er es umbennen oder sonstwohin verschieben. Wenn er ein PKT
verweigert, muß er es in BAD umbenennen. Ansonsten fängt sich Unisched in
einer ENDLOSSCHLEIFE, weil der Tosser immer wieder für das gleiche Paket
aufgerufen wird.
Online-Tossing is not for the weak of heart. Unisched macht es Dir so
einfach wie möglich, aber es ist trotzdem problemlos möglich, damit Dein
System lahmzulegen, Downlinks zu vergraulen, etc. pp. Sage nicht, ich
hätte Dich nicht gewarnt. Wenn man aber sein System im Griff hat, kann
Online-Tossing eine sehr feine Sache sein. Ich selbst setze es übrigens
ein, ohne dabei Probleme zu haben, nur falls jemand daran zweifeln sollte.
:-)
4.1.3 - Jetzt aber ran ans Werk!
Folgende (in Kapitel 3 nicht erwähnte) Konfigurationsstatements sind für
Online-Tossing relevant. Lese Dir das *genau* und *sorgfältig* durch und
aktiviere die Statements erst, wenn Dir alles klar ist.
Inbound = <inbound directory>
-----------------------------
In dem angegebenen Directory sucht Unisched (ausschließlich) nach
.PKT-Dateien. Das Keyword INBOUND darf in der Config mehr als einmal
auftauchen, so daß es möglich ist, durch Wiederholung der Zeile mehrere
Verzeichnisse anzugeben, z.B. den Unprotected Inbound und den Local
Inbound.
Bsp:
Inbound=e:\bt\inound
Inbound=e:\bt\local
ProtIn = <directory>
--------------------
In dem angegebenen Directory sucht Unisched nach .PKT-Dateien *und*
Arcmail-Paketen (*.MO?, *.TU?, ..., *.SU?). Auch hier könnten mehrere
Verzeichnisse angegeben werden, mir ist aber gerade kein Anwendungsfall
dafür bewußt.
Bsp:
ProtIn=e:\bt\secure
TosserSema = <dateiname>
------------------------
Diese Datei zeigt an, ob gerade der Tosser aktiv ist oder nicht. Sie
wird, wenn kein Pfadname angegeben ist, im SemaDir (siehe dort) abgelegt.
Unisched legt diese Datei automatisch an, wenn es nach einem gefundenen
Mailpaket den Tosser startet. Umgekehrt wird der Tosser nur gestartet,
wenn diese Datei noch nicht existiert. Es ist deshalb eine sehr gute
Idee, diese Datei beim Systemstart vom Startup-Skript LOESCHEN zu lassen,
sonst läuft der Tosser z.B. nach einem Stromausfall u.U. nicht mehr.
Bsp:
TosserSema = e:\sema\tossing.sem
TosserAction = $<action1> [$<action2> ...]
------------------------------------------
Die eigentliche Aktion, die nach einem gefundenen Mailpaket ausgeführt
werden soll. Beim Entwerfen der zugehörigen Batch sind einige besonders
wichtigen Regeln zu beachten:
- Ich betone es nochmal, die Batch MUSS MUSS MUSS UNBEDINGT alle
PKT-Dateien und ARC-Mail-Packets aus den angegebenen Inbound- und
ProtIn-Verzeichnissen entfernen. Wenn das durch die Arbeitsweise des
Tossers nicht sichergestellt ist, sollte man dies am Ende der Batch
durch RENAMEs von Hand sicherstellen.
- Am Ende der Batch MUSS die unter TosserSema angegebene Datei gelöscht
werden, um Unisched zu singnalisieren, daß es den Tosser gegebenenfalls
erneut wieder starten kann.
- Es ist nicht ratsam, in dieser Batch den Ticker anzuwerfen. Man sollte
nur Echomail und Netmail tossen. Grund: Der Ticker könnte anlaufen,
wenn zwar schon ein TIC-File, aber noch nicht die dazugehörige Datei
angekommen sind. Dann landet das schon mal im BAD-Verzeichnis. Aus
genau diesem Grund reagiert Unisched auch gar nicht auf TIC-Files.
(Das kann man mit CheckTIC = Yes ändern, wird aber nicht empfohlen).
Den Ticker solltest Du erst nach Session-Ende starten - dazu gibts die
Tosser-Semaphoren, siehe unten.
Bsp:
TosserAction = $Import_Mail_Only
Tosser-Sempahore-Dateien
------------------------
Syntax: +<path+filename> = $<action name> [$<action name> ... ]
Auf die auf diese Art definierten Semaphore-Dateien funktionieren wird
genau so geprüft wie auf normale (mit * statt mit + deklarierte)
Semaphore-Dateien (siehe dort), mit dem einen Unterschied, daß hier nur
reagiert wird, wenn die unter TosserSema angegebene Datei nicht
existiert.
Du brauchst das für folgenden Zweck: Vermutlich wirst Du mit dem unter
TosserAction angegebenen Skript/Batch nicht die komplette Importprozedur
durchlaufen. Der Ticker z.B. *darf* gar nicht aufgerufen werden, und
vielleicht möchtest Du ja auch noch andere Aufgaben trotzdem nur nach
Sessionende ausführen. Dann mußt Du weiterhin auf die MailIn-Sempahore
Deines Tossers (BTMAIL.IN o.ä.) prüfen. Würdest Du das jetzt weiterhin
mit der Methode mit * machen, dann könnte es passieren, daß die Aktionen
nach Sessionende schon ausgeführt werden, während noch getosst wird. Um
das zu verhindern, prüfst Du mit der + - Methode, dann wird die Aktion
erst ausgeführt, wenn alle Pakete getosst sind.
Umgekehrt wird bei der + - Methode auch vor Ausführen der Aktion die bei
TosserSema angegebene Datei angelegt, so daß diese Datei von der
angegebennen Aktion GELOESCHT WERDEN MUSS. Genau wie bei TosserAction.
Bsp:
+btmail.in = $ImportAbschluss
4.1.4 - Viel Spass!
Nachdem Du das jetzt alles konfiguriert hast, lasse Dir erst nochmal die
komplette Logik der Konfiguration durch den Kopf gehen. Ich möchte
nochmals betonen, dass man hier im Zweifelsfall viel verbocken kann ...
4.2 Logausgaben fallweise unterdrücken
--------------------------------------
In manchen Fällen ist es sehr ärgrlich, daß sich ein bestimmtes Event immer
wieder im Logfile meldet. Hierzu gehören z.B. periodische Events mit sehr
hoher Frequenz wie z.B. das Erstellen einer Alive-Semaphore o.ä. Man kann
nun periodische Events gar nicht mehr anzeigen lassen, allerdings möchte man
alle anderen außer dem einen bestimmten vielleicht doch sehen.
Deshalb gibt es neben der Möglichkeit, die Logausgaben über die
Schlüsselworte DiskLog, ScreenLog und PipeLog zu steuern, noch die
Möglichkeiten, einzelne Aktionen oder Events "zu klammern". Man schließt
hierzu die zugehörige Zeile in der Konfiguration, das kann eine
Aktionsdefinition oder eine Eventdefinition sein, in eckige Klammern ein.
Es wird dann alles, was mit dieser Aktion oder diesem Event zusammenhängt,
*nicht* geloggt, weder im Disklog, noch im Fenster, noch in der Pipe,
unabhängig vom Loglevel. Beispiel:
$Create_Alivesemaphore = SEMAPHORE e:\flags\unisched.alv
#111 ~1 = $Create_Alivesemaphore
Dies führt zu sehr häufigen Einträgen im Logfile. Ändert man diese Zeilen
nun entweder so:
[ $Create_Alivesemaphore = SEMAPHORE e:\flags\unisched.alv ]
#111 ~1 = $Create_Alivesemaphore
oder so:
$Create_Alivesemaphore = SEMAPHORE e:\flags\unisched.alv
[ #111 ~1 = $Create_Alivesemaphore ]
oder so:
[ $Create_Alivesemaphore = SEMAPHORE e:\flags\unisched.alv ]
[ #111 ~1 = $Create_Alivesemaphore ]
ab, dann wird nichts, was mit der Alive-Semaphore zu tun hat, mehr im
Logfile erscheinen.
4.3 Auf Semaphoren mit Zeitverzögerung reagieren
------------------------------------------------
Wir erinnern uns an Kapitel 3 zurück. Mit einer Zeile wie der folgenden:
*btmail.in = $Tossen
kannst Du, sobald die Datei btmail.in auftaucht, eine Aktion (hier den
Tosser) starten und gleichzeitig die Datei löschen (Flagfile-Semaphoren).
Mit einer Ziele wie der folgenden:
^\mailer\inbound\xxxfiles.zip = $Fileliste_Entpacken
kannst Du, sobald eine Datei auftaucht, eine Aktion starten, ohne daß die
Datei gelöscht wird. Die Aktion wird erst dann erneut ausgelöst, wenn die
Datei entweder verschwindet und dann wieder neu auftaucht, oder wenn sie
zumindest ihr Datum oder ihre Größe ändert. (Triggerfiles).
Manchmal kann es jedoch wünschenswert sein, nicht instantan bei Erscheinen
einer Datei eine Aktion auszulösen, sondern nur, wenn die Datei schon älter
als eine bestimmte Anzahl von Minuten oder Stunden ist (oder alternativ:
erst, wenn die Datei mindestens eine bestimmten Anzahl von Minuten lang
vorhanden ist).
Das geht, indem Du unmittelbar hinter dem * (der ein Flagfile markiert) bzw.
hinter dem ^ (der ein Triggerfile markiert) in <spitzen> Klammern die Anzahl
von Minuten angibst, um die das auslösen des Events verzögert werden soll.
Hier zwei Anwendungsbeispiele:
4.3.1 Mails etwas verzögert exportieren
^<-10>echotoss.log = $Exportieren
Viele Mail-Editoren schreiben, wenn Du eine Mail erstellt hast, den Namen
der Area, in der die Mail geschrieben wurde, in eine Datei namens
echotoss.log (für Squish) oder netmail.jam bzw. echomail.jam (für JAM).
Es macht Sinn, daß Du, sobald eine solche Datei existiert, den Tosser
startest, um ihn die geschriebene Mail exportieren zu lassen. (Der
Tosser liest die Datei übrigens aus und scanned nur die Areas, die in ihr
gelistet sind, so daß das Exportieren recht schnell von statten geht).
Jedoch möchtest Du den Tosser vielleicht nicht unmittelbar, nachdem Du
die Mail erstellt hast, starten - es könnte ja sein, daß Dir kurz darauf
einfällt, daß Du ja noch etwas anfügen wolltest, oder Du gehst aufs Klo
und denkst dabei nochmal drüber nach, ob Du die Flame von eben vielleicht
doch nicht abschicken wolltest ;-).
Deshalb konfigurierst Du echotoss.log nicht einfach als normales
Triggerfile (wir verwenden keine Flagfiles, da der Tosser die
echotoss.log auswerten möchte und wir sie deshalb nicht schon von
Unisched löschen lassen wöllen), sondern als verzögertes Triggerfile. In
obigem Beispiel hast Du nach schreiben der Mail noch 10 Minuten
Bedenkzeit, bevor die Mail dann vom Tosser gescanned und exportiert wird.
4.3.2 Überprüfen, ob der Mailer noch läuft
*<-30>e:\flags\cl-alive.01 = $Aktion
Der Mailer Cantaloup legt, wenn er startet, eine Datei namens
cl-alive.<tasknummer> an. Wenn nun Cantaloup #1 startet, "sieht"
Unisched in obigem Beispiel die Datei zunächst nicht, weil sie jünger als
eine halbe Stunde.
Was für einen Sinn würde es jetzt aber machen, 30 Minuten nach dem Start
von Cantaloup eine Aktion ausführen zu lassen? Nun, gar keinen. Man muß
nämlich wissen, daß Cantaloup den "Timestamp" dieser Datei alle 5 Minuten
wieder aufs aktuelle Datum setzt. Das Resultat ist, daß die Datei nie
"älter" als 5 Minuten zu sein scheint, und Unisched die Datei nie sehen
wird.
Der einzige Fall, in dem die Aktion in obigem Beispiel ausgeführt wird,
ist der, daß Cantaloup abstürzt. Dann bleibt die Datei cl-alive.01
liegen, ihr Timestamp wird nicht mehr angepaßt, und nach einer halben
Stunde schließlich merkt Unisched davon und kann eine entsprechende
Aktion ausführen (z.B. Alarm schlagen, oder den Rechner booten). Man
sieht daraus übrigens deutlich, daß dies ein fiktives Beispiel ist, denn
Cantaloup stürzt nicht ab. Wenn Du allerdings einen DOS-Mailer hast,
könnte das anders aussehen :-). Dateien, die vergleichbarm it cl-alive
sind, werden von fast jedem gängigen Mailer (teils nur auf Wunsch)
angelegt.
Als Anmerkung zum Schluß möchte ich darauf hinweisen, daß mit obiger
Zeile der Fall, daß Cantaloup sich halbwegs geordnet beendet (z.B. mit
einem Errorlevel, der in der Batch, die Cantaloup aufruft, nicht
abgefangen wird, so daß die Batch beendet wird und netto der Mailer nicht
mehr läuft), auch nicht erkannt wird, weil in dem Falle die Datei
cl-alive ja gelöscht wurde und gar nicht mehr existiert. Deshalb sollte
man vielleicht noch ein invertiertes Triggerfile wie folgt definieren:
!^e:\flags\cl-alive.02 = $Start_CL_Task_1
Da im letzten Beispiel invertierte Triggerfiles zur Sprache kamen, möchte
ich noch auf eines hinweisen: Verzögertes Ausführen von Aktionen
funktioniert nur mit normalen Trigger- und Flagfiles, d.h., man kann prüfen,
ob eine Datei seit mindestens xx Minuten (unverändert) existiert.
Es funktioniert jedoch nicht mit invertierten Trigger- und Flagfiles, d.h.,
man kann nicht prüfen, ob eine Datei bereits mindestens xx Minuten
"verschwunden ist". Eine Syntax wie !^<-30>blah = $blubb wäre daher nicht
zulässig. Denk mal drüber nach - eine existente Datei hat einen Timestamp,
an dem man prüfen kann, wie alt sie ist, eine nicht-existente Datei hat aber
auch keinen Timestamp, mit dem prüfen könnte, wie lange sie schon nicht mehr
existiert ...
5. SHAREWARE
------------
Unisched ist (C) 1996-99 by Tobias Ernst. Diese Software ist Shareware und
darf innerhalb einer Testphase von 30 Tagen kostenlos verwendet werden. Die
Sharewareversion darf beliebig weitergegeben werden, sofern das Programm
vollständig und unmodifiziert weitergegeben wird. Nach der Testphase von 30
Tagen muß man sich registrieren lassen.
Die Registrierung beträgt EUR 12 und gilt für alle zukünftigen
textorientierten Versionen von Unisched für OS/2 und DOS. Das
Registrier-Formular findet sich in der Datei REGISTER.GER. Die
Sharewareversion ist im Funktionsumfang nicht eingeschränkt. Eine Garantie
für Funktionstüchtigkeit des Programmes oder eine Verantwortung für aus der
Nutzung entstehende Folgeschäden kann, soweit gesetzlich zulässig, nicht
übernommen werden.
Wer die Sharewareversion länger als 30 Tage unregistriert verwendet, den möge
der Blitz beim Sch...en treffen ;-))).
6. KONTAKT UND SUPPORT
----------------------
Fidonet (bevorzugt):
Ich lese regelmäßig die folgenden Echoareas:
FIDO_UTIL
OS2BBS.GER
FIDOSOFT.MISC.GER
Alle diese Areas sind gut geeignet, um über Unisched zu diskutieren, und ich
werde dort gestellte Fragen zu Unisched auch beantworten.
Ansonsten bin ich über Fidonet Netmail erreichbar unter
Tobias Ernst @ 2:2476/418
Die jeweils neuste Version von Unisched ist verfügbar via Fido Filerequest
unter dem Magic "UNISCHED" bei 2:2476/418.
Internet:
Es gibt eine Mailingliste über Unisched. Ich werde dort neue Versionen
ankündigen, und jeder User darf dort Fragen stellen oder (falls nötig <g>)
Kritik anbringen :-). Um sich die Mailingliste zu abonnieren schreibt man
eine e-mail an
unisched-list-request@bmtmicro.net
and gibt im Text der Mail als einzige Zeile folgendes an:
subscribe
Man kann mich auch per e-mail erreichen unter
ternst@bmtmicro.net
ich beantworte Fragen aber lieber in der Mailing-Liste :-).
Die jeweils neuste Version von Unisched ist verfügbar bei:
ftp://ftp.bmtmicro.com/bmtmicro
[EOF]