* * Das Programm heižt jetzt "EXPIRE" und die Datei also "EXPIRE.DEF". * XPIRE HERMES UUCP-Software Damit sich Newsartikel nicht endlos ansammeln, muessen diese in regelmaessigen Abstaenden reduziert werden. Normalerweise ist das Hauptkriterium dafuer das Alter, d.h., dass die Artikel, die zu alt sind ('expired' = Verfallsdatum erreicht :-) , expired werden muessen. Diese Aufgabe wird vom Programm XPIRE erledigt, das die Beschreibungen und Kriterien aus dem File XPIRE.DEF liest, das im gleichen Ordner stehen muss wie das File NEWS.DEF, das eine Liste der Newsgroups und Artikelnummern enthaelt, also in der Newsdirectory, die in der Konfigurationsdatei angegeben wurde. Das File XPIRE.DEF enthaelt pro Zeile eine Angabe mit Kriterien fuer einzelne Newsgroups oder Gruppen von Newsgroups. Das File wird dazu zeilenweise durchsucht bis die erste passende Zeile gefunden wird. Soll also eine Bedingung fuer eine einzelne Newsgroup oder Gruppe von Newsgroups gelten und eine andere Bedingung fuer eine umfassendere Gruppe von Newsgroups, zu denen diese spezielle gehoert, dann muss die speziellere Bezeichnung im File vor der anderen kommen. Die Zeilen fuer solche Definitionen beginnen mit dem Namen der Newsgroup. Dieser Name darf auch mit einem '*' enden und bezeichnet dann alle Newsgroups, die mit diesem Teilnamen beginnen. Dahinter kommt dann nach dem Trennzeichen '|' eine Liste von Bedingungen, die jeweils aus einer Zahl und einem Kennbuchstaben bestehen. Fuer alle Newsgroups, fuer die keine passende Zeile gefunden werden konnte (Achtung: eine Zeile '*|...' passt fuer ALLE Newsgroups !), werden _alle_ Zeilen benutzt, in denen kein Newsgroupname und/oder Trennzeichen angegeben wurde, sondern lediglich irgendwelche Kriterien. Im Gegensatz zu den normalen Definitionen koennen das dann auch mehrere Zeilen sein, die alle nacheinander bearbeitet werden. Die letzte Art von Zeilen sind Leerzeilen und Kommentarzeilen, die jeweils ignoriert werden. Kommentarzeilen muessen mit einem "#" beginnen. # Beispiele : news.group.name|20a 48h 30c 10k news.group.*|100a 7d 50a 3d # und als zweites Beispiel mein eigenes XPIRE.DEF : # # zur Zeit laufen Diskussionen in sub.config sub.config|300a # junk kann fast immer sofort geloescht werden (0a :-) # bei automatischem Betrieb aber erst nach einem halben Tag # sicherheitshalber zwei Limits : 200 Artikel, 10 KB pro Artikel junk|200a 12h 10c # einige 'high-traffic' Newsgroups: # Minix nur ohne Sourcen comp.os.minix|200a 22h 10c # culture 'normal', aber weniger lange soc.culture.*|200a 22h 10c # und jetzt noch fuer alle anderen Newsgroups : # normalerweise 3 Tage und kuerzere Artikel # sicherheitshalber ausserdem 200 Artikel 200a 70h 20c # Ich nehme immer 2 Stunden weniger als jeweils einen ganzen Tag, # damit man den XPIRE vor einem taeglichen Poll starten kann. Es gibt die folgenden Kriterien und Kennbuchstaben : a: Anzahl Artikel, die uebrigbleiben sollen. Die neuesten n Artikel werden uebrigbehalten. Es spielt dabei aber keine Rolle, ob diese Artikel wirklich existieren oder ob es 'Luecken' in der Folge der Artikel gibt. Das Kriterium sind nur die Artikelnummern. Da dabei keine Directories und einzelnen Artikel durchsucht werden muessen, ist dieses die schnellste Methode und sollte deshalb bei gleichzeitiger Angabe mehrerer Methoden als erstes benutzt werden, um die Anzahl Artikel fuer das Durchsuchen bei den anderen Methoden zu verringern. k: Kilobytes, die uebrigbehalten werden sollen. Die neuesten n Kilobytes werden uebrigbehalten. Fuer die Menge wird dabei der durch die Artikel verbrauchte Plattenplatz berechnet, also aufgerundet auf ganze Disk- Cluster (und nicht die echten Filelaengen). Wird das angegebene Limit durch ein bestimmtes File ueberschritten, so wird dieses File selbst noch nicht geloescht. Es bleibt also meistens ein bisschen mehr uebrig als angegeben wurde. Da die Filegroessen fuer alle uebrigbleibenden Files einzeln aus der Directory extrahiert werden muessen, ist diese Methode ziemlich zeitaufwendig und sollte nach Moeglichkeit vermieden oder zumindest erst als eines der letzten Kriterien in einer Zeile angegeben werden. h: Stunden (Hours), die uebrigbleiben sollen. Artikel, die in den letzten n Stunden vor dem Aufruf des Xpire durch den RNEWS einsortiert wurden oder deren Timestamp (Datum in der Directory) geaendert wurde (z.B. durch TOUCH oder durch Editieren des Files, Pfui! :-) werden uebrigbehalten. Da dabei alle Files einzeln ueberprueft werden muessen (aehnlich wie bei 'k') ist auch diese Methode etwas zeitaufwendig. Da aber beim aeltesten Artikel (niedrigste Artikelnummer) angefangen wird zu suchen, muss normalerweise nur ein kleiner Teil der Artikel untersucht werden bis ein File gefunden wird, das neu genug ist, um aufgehoben zu werden (fuer Profis: durch die Rundung auf ganze Stunden werden auch die Artikel als 'neu genug' betrachtet, die nur minimal juenger als (n+1) Stunden sind). Alle anderen Artikel, die neuere Artikelnummern haben, werden dann ebenfalls aufgehoben. Diese letzte Feststellung ist insbesondere dann wichtig, wenn man direkt ein File in einer Spooldirectory modifiziert hat (Pfui!) oder wenn man TOUCH benutzt hat. Durch so ein TOUCH auf ein einzelnes File kann man alle Files zwischen dieser Artikelnummer und dem aktuellen File vor dem Xpire durch Altersangabe schuetzen, ohne das XPIRE.DEF editieren zu muessen. Aber 'ganz sauber' ist das natuerlich nicht :-) d: Tage (Days), die uebrigbleiben sollen. Diese Methode entspricht genau der Methode 'h', wobei man statt n Tagen genausogut auch n*24 Stunden angeben kann (intern wird das auch so gemacht :-). Fuer Profis: Dabei ist aber zu beachten, dass ebenfalls nur ganze Stunden abgerundet werden, so dass NICHT alle Artikel des angefangenen Tages (die also juenger sind als (n+1) Tage) aufgehoben werden, sonder nur die Artikel, die juenger sind als (n*24+1) Stunden. c: 'Herausloeschen' langer Artikel (cut). Da es einige 'low-volume' Newsgroups gibt, in denen man mit der Methode 'k' kein hohes Bytelimit angeben will (sonst wuerden im Normalfall viel zu alte Artikel erhalten bleiben), aber da man andererseits auch kein niedriges Limit angeben will (sonst wuerde ploetzlich durch einen einzelnen grossen Artikel die gesamte Newsgroup geloescht werden), kann man mit dieser Methode gezielt Artikel loeschen, die eine bestimmte Groesse ueberschreiten. Damit lassen sich z.B. auch gezielt Sourcepostings aus Diskussionsgruppen herausloeschen. Da bei dieser Methode alle Files der betreffenden Newsgroups durchsucht werden muessen, ist diese Methode die zeitaufwendigste von allen, sollte sinnvollerweise aber nicht als letztes in der Zeile vorkommen, sondern unmittelbar vor einer Ueberpruefung der Gesamtgroesse der Newsgroup mit 'k'. Meistens kann man bei gleichzeitiger Benutzung von 'h' und 'c' auch ganz auf 'k' verzichten. Die folgende Methode gibt es leider noch nicht ... ?: 'Herausloeschen' kurzer Artikel. Dies ist das Gegenstueck zu Methode 'c', allerdings mit dem umgekehrten Sinn. z.B. liessen sich dadurch in Testnewsgroups alle kurzen Tests loeschen, so dass nur noch die interessanten laengeren Artikel ueber 2 KB uebrigbleiben. Aehnliches waere auch bei den Mausgroups moeglich, wo man die Artikel herausloeschen koennte, die nur aus 'Ich auch' bestehen. Und die folgende Methode gibt es auch noch nicht ... i: Ignorieren. Diese Methode soll es lediglich ermoeglichen, dass ein Eintrag fuer eine bestimmte Newsgroup ignoriert wird, so dass in dieser Newsgroup kein Expire mehr stattfindet. Sowas kann z.B. nuetzlich sein, wenn man Diskussionen in bestimmten Newsgroups voruebergehend vom Expire ausschliessen will. Zur Zeit kann man stattdessen einfach einen Eintrag fuer diese Newsgroup mit der Methode '9999a' ganz an den Anfang des Files stellen. Das geht sehr schnell und schliesst praktisch einen Expire aus, unabhaengig davon, ob die Newsgroup weiter hinten im File noch einen anderen Eintrag hat. Der Aufruf von XPIRE erfolgt zur Zeit noch ohne Parameter und es wird dann immer das File XPIRE.DEF benutzt. In Planung :-) sind Parameter, mit denen man eins von mehreren Files auswaehlen kann und/oder erweiterte Parameter in Abhaengigkeit vom Speicherplatz, so dass man automatisch 'immer schaerfer' expiren kann bis der Speicherplatz einen bestimmten Mindestwert hat, so dass wirklich ein optimaler automatischer Betrieb laufen kann. Ausserdem denke ich an Parameter, mit denen man gezielt bestimmte Newsgroups (oder Gruppen von Newsgroups) bearbeiten kann. Vorschlaege zu den Parametern oder zusaetzliche (halbwegs sinnvolle) Expiremethoden nehme ich gerne an. Mails mit entsprechenden Hinweisen bitte an 'anson@akb.in-berlin.de' ...