Geschrieben von: Werner Kofler
Kategorie: Server
This printed page brought to you by AlphaSierraPapa
Eine Frage, die häufig auftritt ist: Wie kann ich ASP-Scripts zu bestimmten Zeiten aufrufen? Oder, eng damit verbunden: Wie kann ich die Ausgabe eines ASP-Scripts in eine Datei umleiten? Zwei verschiedene Ansätze um Probleme dieser Art zu lösen werden in diesem Artikel betrachtet.
ASP-Dateien und WSH Dateien (.vbs und .js) basieren beide auf der gleichen Technologie: dem ActiveX Scripting Host. Der Unterschied ist, daß ASP Scripts von Besuchern einer Website aktiviert werden, und das Ergebnis wird als HTML-Code an den Client zurückgeschickt. WSH Scripts hingegen werden auf der lokalen Maschine von einem User angestossen (seit dem LoveLetter Virus dürfte dies einigen Personen schmerzlich bewußt sein...).
Zwei Probleme für ASP Programmierer, die sich öfter stellen, sind nun folgende:
Um irgendeine Aktion auf einem Server zeitgesteuert zu starten, wird normalerweise ein Scheduler verwendet. Windows NT 4.0 hat einen recht einfachen Scheduler als Dienst integriert.
Das Dos-Kommando
At /?liefert die Anleitung zur Verwendung des Schedulers.
Windows 2000 stellt unter Control Panel/Scheduled Tasks/Add Scheduled Tasks einen wesentlich besseren Scheduler zur Verfügung, sofern man die erweiterten Einstellungen miteinbezieht.
Benutzt man NT 4.0, so sollte man, je nach gegebener Aufgabe, überprüfen, ob AT den eigenen Anforderungen entspricht, oder ob man doch einen professionellen Scheduler installiert. Arcana Development bietet einen effizienten Scheduler an, der einige Möglichkeiten mehr bietet, allerdings auch etwas kostet. (40 USD)
Um ein ASP-Script über einen Scheduler auszuführen, sollte das Script in eine Windows Script Datei umgewandelt werden. Dazu entfernt man jeglichen HTML-Code aus der ASP-Datei, also im Grunde alles was außerhalb der <% %> Delimiter steht. Auch die Delimiter werden entfernt. Wenn im Script Objekte erstellt werden, so ist statt Server.CreateObject nur CreateObject zu verwenden. So wird aus
Set Conn = Server.CreateObject("ADODB.Connection")einfach nur
Set Conn = CreateObject("ADODB.Connection")
Wird im Script ein Response.Write verwendet, so ist das durch WScript.Echo zu ersetzen, das eine Ausgabe zur Konsole tätigt.
Die so modifizierte ASP-Datei sollte jetzt je nach verwendeter Script-Sprache als .vbs oder .js-Datei abgespeichert werden und kann dann mit
Cscript meinscript.vbsaufgerufen werden. Damit kann man z.B. Datenbanken "aufräumen" oder Daten zu statistischen Zwecken aufarbeiten.
Die Vorteile, die das Ausführen mittels WSH mit sich bringt sind folgende:
Sollte aus irgend einem Grund die Umwandlung in eine WSH-Datei nicht möglich sein, oder ist es zu viel Arbeit, kann man auch eine ASP-Datei zu einem bestimmten Zeitpunkt aufrufen. Dazu simuliert man im Prinzip einen Besucher, der das Script aufruft. Ein Tool, das das ermöglicht stammt aus der Unix-Welt und heißt Wget. Tim Charron hat sich die Mühe gemacht, und das Programm in die Microsoft-Welt portiert. Es kann unter von seiner Website heruntergeladen werden.
Wget ist ein Command-Line-Tool das http-Requests ermöglicht. Über zahlreiche Parameter (Anzeige über Kommando wget -help) kann man das Programm sehr gut steuern.
Um jetzt ein ASP-Script zeitgesteuert auf dem Web-Server auszuführen benutzt man wiederum einen Scheduler und erstellt einen entsprechenden Task. Dieser kann dabei auf demselben Server wie auch auf einem anderen Host ausgeführt werden. Wichtig ist in letzterem Fall, daß zum entsprechenden Zeitpunkt eine http-Verbindung zum Server möglich sein muß.
Der Befehl
Wget www.webserver.com/script.asp -cruft die Datei script.asp vom Webserver ab, und speichert das Ergebnis (HTML-Code) unter dem selben Namen lokal ab. Der Paramter -c weist Wget an eine eventuell bereits vorhandene Datei zu überschreiben. Das ist wichtig da Wget ansonsten eine neue Datei "script.asp.1" usw. erstellt. Funktionen wie das Speichern unter einem anderen Namen, rekursive Aufrufe, Wiederholungsversuche, Benutzer-Authentifizierung usw. können ebenfalls angegeben werden.
Das Ausführen eines Wget Kommands wirkt sich am Webserver wie ein "richtiger" HTTP-Request eines "richtigen" Besuchers aus. Es wird also auch ein Log-Eintrag erstellt, der bei entsprechender Häufigkeit Statistiken beeinflussen kann. Weiters zu beachten ist, daß ein ASP-Script auch zu lange brauchen und ein Timeout zurückgeben kann.
Die hier beschriebene Methode ist eigentlich keine richtige Umleitung, sondern eine weitere Anwendungsmöglichkeit von Wget. Mit
Wget www.webserver.com/script.asp -O script.html -ncruft man das Script auf, und speichert das Ergebnis als HTML-Code in der Datei script.html lokal ab.
Wird Wget auf diese Weise auf dem Webserver selbst aufgerufen, hat man hiermit die Ausgabe an den Client in die entsprechende Datei "umgeleitet". Das eignet sich auch hervorragend um vielbesuchte Seiten, die resourcenfressenden Code enthalten, nur einmal alle x Minuten auszuführen, und dem Besucher die statische HTML-Seite zu präsentieren. Wird, als Beispiel, die Startseite öfter als einmal alle 3 Minuten aufgerufen, so kann es sinnvoll sein, diese Seite nur einmal über Wget aufzurufen, und das generierte Ergebnis dann als statische HTML-Seite zu verlinken.
In diesem Fall sollte aber auf entsprechende Verfalls-Angaben im http-Header oder im <HEAD>-Teil des HTML-Codes geachtet werden, um dem Besucher auch wirklich immer aktuelle Daten zu präsentieren. Der AspHeute-Artikel Caching bei Browser und Proxy gibt eine Anleitung dazu.
Bei einem Abruf eines ASP-Scripts über Wget von einem anderen Host aus hat man eine hervorragende Möglichkeit um Content zu replizieren bzw. zu spiegeln. Der ganze Vorgang läuft über das HTTP-Protokoll ab, und dürfte somit weder von Firewalls noch Proxies blockiert werden. Weiters ermöglicht es Wget auch, ein ASP-Script "remote" zeitgesteuert aufzurufen. Dies ist vor allem sinnvoll wenn man keinen administrativen Zugang zum Webserver hat, um auf diese Weise den Scheduler zu konfiguieren. Grundsätzlich gilt: Wget eignet sich hervorragend um das Ergebnis von ASP-Scripts lokal in einer Datei abzuspeichern.
Zur Lösung von Automatisationproblemen mit WSH gilt zu sagen, daß es normalerweise möglich ist, ein ASP-Script in ein WSH-Script umzuwandeln. Wenn man diese Möglichkeit hat, sollte man sich ernsthaft überlegen, diese der Verwendung von Wget vorzuziehen - die wichtigsten Vorteile sind die Nicht-Belastung des Webservers, die Nicht-Gefährdung seiner Laufstabilität sowie die erweiterten Möglichkeiten durch administrative Benutzeraccounts.
This printed page brought to you by AlphaSierraPapa
Automatisation mit SQL Server
http:/www.aspheute.com/artikel/20000629.htm
Caching bei Browser und Proxy - Woher Seiten wirklich kommen
http:/www.aspheute.com/artikel/19990808.htm
Filesystem-Watcher leicht gemacht
http:/www.aspheute.com/artikel/20040517.htm
Kommandozeilen-Programme aufrufen
http:/www.aspheute.com/artikel/20010516.htm
Schluß mit lustig Teil 3 - das Hfnetchk Tool
http:/www.aspheute.com/artikel/20010928.htm
Arcana Development
http://arcanadev.com/
Wget
http://www.interlog.com/~tcharron/wgetwin.html
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.