HELIOS ImageServer Benutzerhandbuch


7 Script Server
HELIOS ImageServer 2.5 enthält einen Script Server Dienst, der einen Mechanismus zur Überwachung von Ordnern implementiert. Sie ziehen einfach eine Datei in einen überwachten Ordner und es wird automatisch ein Vorgang gestartet, der die Datei gemäß einem vorhandenen Skript konvertiert.
Wesentliche Vorteile des Script Servers sind:
7.1 Einleitung und Beispiel
Jeder Ordner auf Ihrem EtherShare-Server kann als überwachter Ordner genutzt werden. Im folgenden Beispiel soll unser ausgesuchter Ordner "For the Web" heißen. Wir werden den Script Server so einrichten, dass er alle Bilder mit erlaubten Formaten, die in den überwachten Ordner gezogen werden, in das JPEG-Format konvertiert.
HELIOS liefert eine Reihe Beispielskripte für unterschiedliche Bildformate und Anwendungszwecke mit. Hier verwenden wir Zeilen aus dem Beispielskript "webjpeg", das der Script Server aufrufen muss, damit unser überwachter Ordner funktioniert. Alles was Sie tun müssen, ist die folgenden Zeilen in der Script Server-Konfigurationsdatei zu ergänzen:
-> Wählen Sie im EtherShare Admin Listen > Script Server > Konfiguration aus, um das Fenster scriptsrv.conf zu öffnen (siehe Abb. 36).
Fig. 36: Das Fenster srciptsrv.conf in EtherShare Admin

-> Um auf das Beispielsskript zugreifen zu können, müssen Sie sich mit dem HELIOS Server verbinden und das Volume "Scripts" mounten. Wählen Sie die Datei "webjpeg" aus und ziehen Sie das Symbol auf einen Texteditor wie beispielsweise BBEdit (siehe Abb. 37).

Wichtig: Stellen Sie sicher, dass der verwendete Texteditor Dateien mit der UNIX konformen Zeilenschaltung speichert (nur "LF"). Texteditoren mit Macintosh-kompatibler ("CR") oder Windows-kompatibler ("CR-LF") Zeilenschaltung funktionieren hierfür nicht!
Abb. 37: Öffnen des Skripts in einem Texteditor

Hinweis: Normalerweise ist das Volume "Scripts" für jeden Benutzer außer "root" schreibgeschützt. Passen Sie die Schreibrechte entsprechend an, wenn Sie Skripte auf dem Volume editieren oder eigene Skripte dort speichern wollen.

-> Wählen Sie im Editor die Zeilen mit der vorgegebenen Konfiguration aus, wie es in Abb. 38 zu sehen ist. Jedes Beispielsskript enthält diese Zeilen mit einer vorgegebenen Konfiguration, die wir in der Script Server-Konfigurationsdatei verwenden.
-> Kopieren Sie die Konfigurationszeilen (in Abb. 38 grau markiert) aus dem Editorfenster.
Fig. 38: Auswahl der vorgegebenen Konfigurationszeilen in BBEdit

-> Fügen Sie die Zeilen, die Sie aus dem Beispielskript kopiert haben, an das Ende der Konfigurationsdatei an, die im EtherShare Admin-Fenster scriptsrv.conf zu sehen ist. Löschen Sie dann das jeweils erste Zeichen ("#") in jeder eingefügten Zeile und ersetzen Sie den Eintrag
"/demovol/webjpeg" durch den Namen und Pfad des zu überwachenden Ordners.
In unserem Beispiel heißt der Ordner "For the Web" und liegt im Pfad "/images" (siehe Abb. 38 und 39).
In Abb. 39 sehen Sie, wie das Fenster scriptsrv.conf aussehen sollte, nachdem die Zeilen in das Dokument eingefügt wurden.
-> Schließen Sie jetzt das Fenster scriptsrv.conf und sichern Sie Ihre Änderungen.
Fig. 39: Editiertes EtherShare Admin-Fenster scriptsrv.conf

Sobald Sie Ihre Änderungen gesichert haben, wird der Script Server benachrichtigt und Ihr überwachter Ordner ist betriebsbereit. Sie können nun Bilder in den überwachten Ordner verschieben. Sie werden einen neuen Ordner ("DONE") im überwachten Ordner bemerken. Dieser Ordner enthält die konvertierten JPEG-Bilder, deren Dateinamen automatisch der Buchstabe "N" angehängt wurde (z. B. aus "image.tif" wird "imageN.tif"), sowie die Originalbilder.
Sie finden eine ausführliche Beschreibung der Script Server-Konfiguration, zum Starten, Stoppen und Aktualisieren des Script Server-Prozesses, über das Einfügen von Beispielskripten und über die Fehlerbeseitigung in Skripten in Kapitel 7.2 "Konfiguration".
Überwachte Ordner
In Abb. 40 sehen Sie den überwachten Ordner "For the Web" bevor Dateien hineinkopiert (1) und nachdem Dateien hineingezogen und bearbeitet wurden (2).
Fig. 40: Überwachter Ordner vor und nach einem Script Server-Vorgang

Logdatei
Auf die Logdatei des Script Servers können Sie sehr einfach aus EtherShare Admin zugreifen:
-> Wählen Sie im Programm EtherShare Admin Listen > Logdatei > Script Server aus, um das Fenster scriptsrv.log zu öffnen (siehe Abb. 41)
Fig. 41: Das EtherShare Admin-Fenster scriptsrv.log
.

Hinweis: Die Ausgabe der Logdatei kann mit Einträgen von aktuell laufenden Skripten durchsetzt sein.

7.2 Konfiguration
"HELIOSDIR/var/conf/scriptsrv.conf" ist die Hauptkonfigurationsdatei.
"HELIOSDIR/var/adm/scriptsrv.log" ist die Logdatei, die die stdout/stderr-Ausgaben aller Skripte sowie die Meldungen des Dienstes "scriptsrv" enthält.
HELIOS liefert mit seiner Software eine Reihe von Beispielskripten aus (siehe auch Abschnitt 7.2.3 "Vorhandene Beispielskripte"). Auf diese kann nach dem Mounten des Volumes "Scripts" zugegriffen werden.
Zugriff aus EtherShare Admin
Auf die beiden Dateien "scriptsrv.conf" und "scriptsrv.log" kann aus EtherShare Admin zugegriffen werden (Listen > Script Server).
7.2.1 Starten, Stoppen und Aktualisieren des Script Server-Prozesses
Der "scriptsrv"-Prozess wird automatisch bei der Verwendung der Befehle "start-helios" und "stop-helios" gestartet bzw. gestoppt. Der Status des "scriptsrv"-Dienstes kann mit Hilfe des Werkzeugs "srvutil" geändert werden:

Hinweis: Das Werkzeug "srvutil" befindet sich im Verzeichnis "HELIOSDIR/bin".

Stoppen des "scriptsrv"-Dienstes
# srvutil stop scriptsrv
Stoppt den Dienst "scriptsrv". Neue Ereignisse werden nicht verarbeitet. Alle bereits in der Warteschlange stehenden Ereignisse werden bis zu 30 Sekunden nach dem Auftreten des Stop-Befehls noch abgearbeitet. An alle ausgeführten Skripte wird als Information über das Abschalten des Dienstes "scriptsrv" das Signal TERM zugesandt.
Starten des "scriptsrv"-Dienstes
# srvutil start scriptsrv
Startet den Dienst "scriptsrv".
Rekonfiguration des "scriptsrv"-Dienstes
# srvutil reconf scriptsrv
Mit diesem Befehl aktualisiert der Script Server seine Konfigurationsdatei "scriptsrv.conf" in Bezug auf die überwachten Ordner. Außerdem werden die Präferenzeneinstellungen für den "scriptsrv"-Dienst neu eingelesen. Wird "scriptsrv.conf" in EtherShare Admin modifiziert, dann findet eine automatische Rekonfiguration statt (siehe Zugriff aus EtherShare Admin). Die Präferenzen für den "scriptsrv" -Dienst sind im Abschnitt 8.1.5 "Script Server preferences" aufgelistet und erläutert.
7.2.2 Die Script Server-Konfigurationsdatei
Die Konfigurationsdatei "scriptsrv.conf" enthält eine oder mehrere Zeilen zur Festlegung der überwachten Ordner mit den zugehörigen auszuführenden Skripten:

Hinweis: Das Semikolon ist das Trennzeichen zwischen zwei Feldern. Wenn Sie ein Semikolon in einem Feld verwenden, dann muss ihm ein rückwärts gerichteter Schrägstrich ("\") vorangestellt werden.

TYPE
Macintosh-Dateityp, z. B. EPSF oder TIFF. Nur Dateien, die diesem Dateityp entsprechen, werden bearbeitet (immer 4 Buchstaben!).
Extension
Windows-Namenserweiterung zur Kennzeichnung des Dateityps, z. B. ".tif". Nur Dateien, die diesem Dateityp entsprechen, werden bearbeitet (immer ".xyz"-Syntax!).
Watched folder
Alle Dateien in diesem Ordner werden rekursiv bearbeitet (d. h. Unterordner werden auch bearbeitet).
Script
Ein UNIX Shellskript oder ein Perlskript, das zur Bearbeitung der Dateien aufgerufen werden soll. Das erste Argument des Skripts ist ein Dateiname, zusätzliche Parameter werden über Umgebungsvariablen übergeben. Sie finden schreibgeschützte Beispielskripte im Verzeichnis
"HELIOSDIR/etc/scriptsrv". Angepasste Skripte sollten im Verzeichnis "HELIOSDIR/var/scripts" gesichert werden, um eine mögliche Übertragung auf eine andere Serverplattform zu gewährleisten.
User ID
Der UNIX Benutzername, unter dem das Skript ausgeführt wird, z. B. "root", "demouser", ...
Environment variables
Es kann eine durch Komma getrennte Liste von Umgebungsvariablen angegeben werden, die an das Skript übergeben wird, z. B. PRINTER=Laser,SCRIPTDEBUG=1. Damit hat man ein allgemeines Skript, das mit verschiedenen Parametern genutzt werden kann.
"scriptsrv.conf"
# HELIOS Script Server configuration file
#
# Lines in this file have the form
#
# type:extension:dirpath:script:scriptuser:scriptenv
#
# type is the Macintosh Type, e.g. TIFF
# extension is the Windows extension e.g. .tif
# script is the program to be called for the hot
# folder, e.g. var/scripts/scriptname. If
# 'script' is not a fully specified path
# (starting with /), it is searched in
# HELIOSDIR and in HELIOSDIR/var/scripts.
# It is recommended that you save all scripts
# in HELIOSDIR/var/scripts.
# scriptuser is the user under which the script is
# getting called, e.g. root.
# scriptenv is a comma separated list of key=value
# items which are exported as environment
# variables for the script.
#
# The fields are separated by colons. Colons used within
# a field must be quoted with a backslash (\:).
#
#Examples:
#TEXT:.ps:/demovol:printps:root:PRINTER=lw,SCRIPTDEBUG=1
#PDF :.pdf:/demovol:printpdf:demouser:
#
#Wildcard registration for all file types/extensions:
#\0\0\0\0:\0:/demovol:printps:root:

7.2.3 Vorhandene Beispielskripte
Wir stellen die folgenden Beispielskripte zum Einsatz der Script Server-Funktionalität mit unserer Software zur Verfügung (Sie finden im Folgenden jedes Beispielskript mit den entsprechenden Zeilen für den Eintrag in die Datei "scriptsrv.conf" hier aufgelistet). Bitte beachten Sie, dass in den folgenden Beispielen für den Parameter OUTDIR der Ausdruck "out" verwendet wird:
printps
Druckt PostScript-Dateien an einen ausgewählten Drucker:
TEXT:.ps:/demovol/printps:printps:root:PRINTER=lw,SCRIPTDEBUG=1
EPSF:.eps:/demovol/printps:printps:root:PRINTER=lw,SCRIPTDEBUG=1

printtext
Druckt Text-Dateien an einen ausgewählten Drucker:
TEXT:.txt:/demovol/printtext:printtext:root:PRINTER=lw,SCRIPTDEBUG=1
printpdf
Druckt PDF-Dateien an einen ausgewählten PostScript-Drucker:
PDF :.pdf:/demovol/printpdf:printpdf:root:PRINTER=lw,SCRIPTDEBUG=1
splitPDF
Teilt eine PDF-Datei in Einzelseiten auf und verschiebt die neuen PDF-Dateien in das über den Parameter OUTDIR ausgewählte Verzeichnis:
PDF :.pdf:/demovol/splitPDF:splitPDF:root:OUTDIR=out,SCRIPTDEBUG=1
convertpdf2eps
Konvertiert eine PDF-Seite in eine EPSF-Datei und verschiebt die neue EPSF-Datei in das über den Parameter OUTDIR ausgewählte Verzeichnis:
PDF :.pdf:/demovol/convpdf2eps:convpdf2eps:root:OUTDIR=out,SCRIPTDEBUG=1
convert2Lab
Konvertiert alle unterstützten ImageServer-Dateitypen nach TIFF CIE-Lab und verschiebt die konvertierten Dateien nach OUTDIR:
PDF :.pdf:/demovol/convert2Lab:convert2Lab:root:OUTDIR=out,SCRIPTDEBUG=1
TIFF:.tif:/demovol/convert2Lab:convert2Lab:root:OUTDIR=out,SCRIPTDEBUG=1
EPSF:.eps:/demovol/convert2Lab:convert2Lab:root:OUTDIR=out,SCRIPTDEBUG=1
JPEG:.jpg:/demovol/convert2Lab:convert2Lab:root:OUTDIR=out,SCRIPTDEBUG=1
PNGf:.png:/demovol/convert2Lab:convert2Lab:root:OUTDIR=out,SCRIPTDEBUG=1
BMP :.bmp:/demovol/convert2Lab:convert2Lab:root:OUTDIR=out,SCRIPTDEBUG=1
8BPS:.psd:/demovol/convert2Lab:convert2Lab:root:OUTDIR=out,SCRIPTDEBUG=1
8BIM:.psd:/demovol/convert2Lab:convert2Lab:root:OUTDIR=out,SCRIPTDEBUG=1
PICT:.pct:/demovol/convert2Lab:convert2Lab:root:OUTDIR=out,SCRIPTDEBUG=1
..CT:.ct:/demovol/convert2Lab:convert2Lab:root:OUTDIR=out,SCRIPTDEBUG=1

webpicts
Erzeugt eine 128 x128 Pixel PNG-Internetdatei und verschiebt die neue PNG-Dateien in das über den Parameter OUTDIR ausgewählte Verzeichnis. Alle Farben (inklusive Schmuckfarben) werden nach RGB konvertiert:
PDF :.pdf:/demovol/webpicts:root:OUTDIR=out,SCRIPTDEBUG=1
TIFF:.tif:/demovol/webpicts:webpicts:root:OUTDIR=out,SCRIPTDEBUG=1
EPSF:.eps:/demovol/webpicts:webpicts:root:OUTDIR=out,SCRIPTDEBUG=1
JPEG:.jpg:/demovol/webpicts:webpicts:root:OUTDIR=out,SCRIPTDEBUG=1
PNGf:.png:/demovol/webpicts:webpicts:root:OUTDIR=out,SCRIPTDEBUG=1
BMP :.bmp:/demovol/webpicts:webpicts:root:OUTDIR=out,SCRIPTDEBUG=1
8BPS:.psd:/demovol/webpicts:webpicts:root:OUTDIR=out,SCRIPTDEBUG=1
8BIM:.psd:/demovol/webpicts:webpicts:root:OUTDIR=out,SCRIPTDEBUG=1
PICT:.pct:/demovol/webpicts:webpicts:root:OUTDIR=out,SCRIPTDEBUG=1
..CT:.ct:/demovol/webpicts:webpicts:root:OUTDIR=out,SCRIPTDEBUG=1

webjpeg
Erzeugt eine 128 x128 Pixel JPEG-Internetdatei und verschiebt die neue JPEG-Dateien in das über den Parameter OUTDIR ausgewählte Verzeichnis. Alle Farben (inklusive Schmuckfarben) werden nach RGB konvertiert:
PDF :.pdf:/demovol/webjpeg:webjpeg:root:OUTDIR=out,SCRIPTDEBUG=1
TIFF:.tif:/demovol/webjpeg:webjpeg:root:OUTDIR=out,SCRIPTDEBUG=1
EPSF:.eps:/demovol/webjpeg:webjpeg:root:OUTDIR=out,SCRIPTDEBUG=1
JPEG:.jpg:/demovol/webjpeg:webjpeg:root:OUTDIR=out,SCRIPTDEBUG=1
PNGf:.png:/demovol/webjpeg:webjpeg:root:OUTDIR=out,SCRIPTDEBUG=1
BMP :.bmp:/demovol/webjpeg:webjpeg:root:OUTDIR=out,SCRIPTDEBUG=1
8BPS:.psd:/demovol/webjpeg:webjpeg:root:OUTDIR=out,SCRIPTDEBUG=1
8BIM:.psd:/demovol/webjpeg:webjpeg:root:OUTDIR=out,SCRIPTDEBUG=1
PICT:.pct:/demovol/webjpeg:webjpeg:root:OUTDIR=out,SCRIPTDEBUG=1
..CT:.ct:/demovol/webjpeg:webjpeg:root:OUTDIR=out,SCRIPTDEBUG=1

7.2.4 HELIOS Speicherverzeichnis für Skripte
Wir empfehlen Ihnen, alle Skripte in das Volume "Scripts" zu kopieren. Die Vorteile des von HELIOS vorgegebenen Verzeichnisses zur Speicherung von Skripten sind:
7.3 Entwicklung und Fehlerbeseitigung von Skripten
Die Startmeldung des "scriptsrv"-Dienstes ist in der Logdatei "scriptsrv.log" zu finden, auf die auch von EtherShare Admin aus zugegriffen werden kann. Bitte stellen Sie mit Hilfe des Aufrufs "srvutil status" sicher, dass der Dienst "scriptsrv" läuft und dass die Datei
"scriptsrv.log" keine Fehlermeldungen enthält.
Die Registrierungen für die unterschiedlichen Skripte müssen in der Startmeldung der Datei "scriptsrv.log" angezeigt werden: "Config line xx: ...".
Wenn dies nicht der Fall ist, dann ist entweder die Konfigurationsdatei leer oder Sie finden andere Fehlermeldungen.
Jedesmal wenn ein kundenspezifisches Skript aufgerufen wird, enthält die Datei "scriptsrv.log" jeweils eine Zeile mit "Start scriptname ..." sowie "Done scriptname ...". Jede normale Ausgabe sowie jede Fehlermeldung des Skripts wird automatisch in die Datei "scriptsrv.log" umgeleitet.
7.3.1 Skriptparameter
Skripte werden mit dem Dateinamen als erstes Argument aufgerufen. Beispielsweise bekommt ein UNIX Shellskript den Dateinamen in $1, ein Perlskript in $ARGV[0].
Zusätzliche vorgegebene Parameter werden über Umgebungsvariable bereitgestellt. "HELIOSDIR" ist immer mit dem Verzeichnis belegt, in dem die HELIOS Produkte installiert sind.
Zusätzliche kundenspezifische Parameter können in der Datei "scriptsrv.conf" als letztes Argument jeder Konfigurationszeile angegeben werden,
z. B. SCRIPTDEBUG=1,PRINTER=lw. Die kundenspezifische Umgebung ist als Umgebungsvariable im Skript verfügbar. Damit ist es möglich, ein Skript zu entwickeln und es für verschiedene überwachte Ordner zu nutzen, indem unterschiedliche Parameter genutzt werden (z. B. Drucker, ICC-Profile, Farbräume, usw.).
7.3.2 Fehlerbeseitigung in separat laufenden Skripten (ohne Script Server)
Es ist eine gute Idee, Ihre Skripte zunächst manuell in einer UNIX Terminalsitzung zu testen um zu überprüfen, ob sie funktionieren. Per Vorgabe ruft der Script Server alle Skripte so auf, dass das aktuelle Verzeichnis auf das HELIOS Produktverzeichnis gesetzt ist. Daher ist es notwendig, dass Sie zunächst in das Verzeichnis HELIOSDIR wechseln, bevor Sie ein Skript manuell aufrufen:
Manueller Aufruf eines nicht automatisierten Skripts, z. B. das Skript "printps", unter Verwendung einer Bash- oder Bourne-Shell:
# cd /usr/local/helios
# chmod +x var/scripts/printps
# export HELIOSDIR="/usr/local/helios"
# export PRINTER="lw"
# export SCRIPTDEBUG=1
# var/scripts/printps "/data/demovol/TestFolder
/samplefile.ps"

Wenn dieser Aufruf Fehlermeldungen hervorruft oder das Skript sich nicht wie erwartet verhält, dann muss dieses Problem gelöst werden, bevor das Skript in dem automatisierten Ereignis-gesteuerten Script Server eingesetzt wird.
Der Aufruf von nicht automatisierten Skripten ermöglicht die Fehlerbeseitigung unter Verwendung des Perl-Debuggers oder des UNIX Debuggers "gdb/dbx" für C/C++ Programme. Die einfache Fehlerbeseitigung mit Hilfe von ausgegebenen Meldungen innerhalb der automatischen Script Server-Umgebung kann ebenfalls eingesetzt werden. Die gesamte Ausgabe des Skripts wird automatisch in die Datei "scriptsrv.log" umgeleitet.

Hinweis: Jedes HELIOS Perl-Beispiel enthält den folgenden "Header" (Pseudokommentar):

#!var/run/runperl -w
Dies bedeutet, dass das Skript einfach durch Aufruf ausgeführt wird. Es muss immer aus dem HELIOS Verzeichnis aufgerufen werden (z. B. "/usr/local/helios"), da sonst der Pfad "var/run/runperl" nicht gefunden wird. Die Datei "runperl" ist ein symbolischer Link auf Ihren Perl-Interpreter (Perl runtime), z. B. "/usr/bin/perl" auf Mac OS X- oder Linux-Systemen.
Bei jedem Aufruf des Befehls "start-helios" wird der "runperl"-Link automatisch erzeugt. Dies kann hilfreich sein, wenn Perl zu einem späteren Zeitpunkt installiert wird (in den Skripten sind keine Änderungen erforderlich).
Eine alternative Möglichkeit zum Testen Ihrer Skripte in einem anderen Verzeichnis ist die Erzeugung des runperl-Links in Ihrem Skript-Verzeichnis.
Beispiel (z. B. auf Mac OS X oder Linux):
# cd /home/myhome
# mkdir -p var/run
# ln -s /usr/bin/perl var/run/runperl

7.3.3 Skript-Fehlerbeseitigung in der Script Server-Umgebung
Um die aktuelle "runQueue" und die Konfiguration des laufenden "scriptsrv"-Daemon zu inspizieren, kann das UNIX Signal USR1 an den "scriptsrv"-Daemon übermittelt werden (z. B. Ermitteln der PID über den Aufruf "srvutil status"). Der Befehl kill -USR1 pid gibt die Konfiguration in die Datei "scriptsrv.log" aus. Eine andere Möglichkeit zum Einschalten von Debug-Meldungen für den "scriptsrv" Prozess besteht über das Setzen der Präferenz debug, z. B.:
# prefvalue -k Programs/scriptsrv/debug -t int 1
Löschen Sie die Präferenz debug über:
# prefvalue -k Programs/scriptsrv/debug -d

Wichtig: Wir raten davon ab, die Debug-Präferenz auf einem Produktionsserver zu verwenden, da dies eine große Systemlast auf dem Server zur Folge hat und den Server in erheblichem Maße bremsen kann!

7.4 Weitere Überlegungen
Der Dienst "opisrv" sendet Ereignisse für jede Datei des/der registrierten Typs/Namenserweiterung auf jedem HELIOS Volume unabhängig davon, ob für das Volume/Verzeichnis die Layouterzeugung aktiviert ist oder nicht.
Der Dienst "scriptsrv" muss jedes Ereignis bearbeiten und die Dateien aussortieren, für die keine weitere Bearbeitung notwendig ist. Er muss für die übriggebliebenen Dateien überprüfen, ob diese bereits in die Warteschlange aufgenommen worden sind.
Daher sollten Sie die registrierten Typen/Namenserweiterungen auf jene beschränken, die tatsächlich von Ihrem Skript bearbeitet werden, so dass unnötige Kommunikation und Verarbeitung vermieden wird.
Wenn Sie Skripte für die Layouterzeugung (mit dem normalen oder dem Konvertierungsmodus) verwenden, dann sollten Sie die automatische Layouterzeugung für den überwachten Ordner oder das komplette Volume, in dem sich der überwachte Ordner befindet, deaktivieren.

© 2003 HELIOS Software GmbH