sideshow88
Goto Top

Batch-Skript anpassen

Hallo liebe Community,

ich möchte gerne ein Batch-Skript, welches den Status diverser Krankenhausschnittstellen anzeigt, dahingehen ändern, dass es einen Befehl automatisch absetzt und das Ergebnis in ein Texfile schreibt, damit ich den Status mit Nagios überwachen kann. Leider habe ich von unten stehendem Batchfile nicht so viel die Ahnung.

Hier folgendes Batchfile:
@call "%~dp0\setbsld.bat"  
@set SYS_OPT=%SYS_OPT% -Dbsloader.noupdate=true
@set SYS_OPT=%SYS_OPT% -Dbsloader.mainclass=ag.gwi.app.comm.jaif.JAIFTool
@%JAVA_HOME%\bin\java.exe %SYS_OPT% -jar "%~dp0\bsld.jar" -console localhost:1099  
Dieses Batchfile öffnet unsere "Jaif"-Konsole (nach ca 2 Sek. Ladezeit in der "normalen" Konsole). Mit dem Befehlt "show status" können wir den status der Schnittstellen dann abfragen. Dieser Befehlt listet die einzelnen Schnittstellen mit Status auf.
Wie bereits erwähnt möchte ich nun gerne haben, dass wenn man das Batchskript aufruft, automatisch der Befehl "show status" abgeschickt wird und das ergebnis in ein Textfile geschrieben wird. Somit könnte ich
das Textfile mit einer Abfrage nach dem Wort "offline" oder "Error" durchsuchen, und Nagios mithilfe des NS-Clients den gewünschten Exit-Code übergeben. Am besten wäre das natürlich, wenn das alles in das Ausgangsskript kommen könnte. Es sei denn, ihr habt evtl. eine bessere Idee das abzubilden ;)

Hier noch dei beiden anderen Skripte, die wohl durch das obere Skript aufgerufen werden:
setbsld.bat
@REM ###############
@REM LOADER SETTINGS
@REM ###############
@call "%~dp0\setenv.bat"  
@set SYS_OPT=-Dbsloader.libdir=%LIB_DIR%
@set SYS_OPT=%SYS_OPT% -Dbsloader.classdir=%CLASSES_DIR%
@set SYS_OPT=%SYS_OPT% -Dbsloader.resdir=%RESOURCES_DIR%
@set SYS_OPT=%SYS_OPT% -Dbsloader.startmethod=main
@REM Uncomment the next line to see the BSLD output
@REM set SYS_OPT=%SYS_OPT% -Dbsloader.verbose=true
@set SYS_OPT=%SYS_OPT% -Dbsloader.passparams=true
@set SYS_OPT=%SYS_OPT% -Dbsloader.usestatic=true
@set SYS_OPT=%SYS_OPT% -Dbsloader.noshutdown=true
@set SYS_OPT=%SYS_OPT% -Dbsloader.dbalias=%DATABASE_ALIAS%
@REM Uncomment following two lines to enable database user and password parameters. User name and password must be set in setenv.bat.
@REM set SYS_OPT=%SYS_OPT% -Dbsloader.dbuser=%DATABASE_USER%
@REM set SYS_OPT=%SYS_OPT% -Dbsloader.dbpwd=%DATABASE_PWD%
@set SYS_OPT=%SYS_OPT% -Dbsloader.rmisecmgr=true
@set SYS_OPT=%SYS_OPT% -Djava.security.policy=%JAIF_HOME%/system/jaif.policy
@REM #################
@REM STANDARD SETTINGS
@REM #################
@set SYS_OPT=%SYS_OPT% -Dcnf=%CNF_PATH%
@set SYS_OPT=%SYS_OPT% -DJAIFHOME=%JAIF_HOME%
@set SYS_OPT=%SYS_OPT% -Dgwi.comm.rmiport=1099
und
setenv.bat
@REM ################################
@REM # SETS THE CURRENT ENVIRONMENT #
@REM ################################
@set JAVA_HOME="C:\Program Files (x86)\Java\jre7"  
@set CLASSES_DIR="C:\JAIF\JAIF_HL7/classes"  
@set LIB_DIR="C:\JAIF\JAIF_HL7/lib"  
@set RESOURCES_DIR="C:\JAIF\JAIF_HL7\resources"  
@set DATABASE_ALIAS=KHV
@REM Uncomment following two lines and set correspondingly database user and password. Equivalent changes in setbsld.bat required.
@REM set DATABASE_USER=
@REM set DATABASE_PWD=
@set CNF_PATH="C:\JAIF\JAIF_HL7\admin\orbis.cnf"  
@set JAIF_HOME="C:\JAIF\JAIF_HL7\jaif"  
@set INSTALL_HOME="C:\JAIF\JAIF_HL7"  
Ich hoffe ich konnte mich einigermaßen ausdrücken und ihr versteht mein Problem.

Ich bin für jede Hilfe dankbar.
LG

Niko

[Edit Biber] Codeformatierung nachgezogen.[/Edit]

Content-ID: 270383

Url: https://administrator.de/contentid/270383

Ausgedruckt am: 22.11.2024 um 05:11 Uhr

Clijsters
Lösung Clijsters 27.04.2015 aktualisiert um 13:37:46 Uhr
Goto Top
Hallo Niko,

wonach du suchst, sind Pipes.

Oh ja, du solltest auch nach Codetags suchen, um die Codezeilen etwas übersichtlicher in die Beiträge integrieren zu können ;)
Siehe hier


Das soll heißen, den ersten Teil deines Batchfiles könntest du in etwa so realisieren: (nur beispielhaft)
call "%~dp0\setbsld.bat"  
set SYS_OPT=%SYS_OPT% -Dbsloader.noupdate=true
set SYS_OPT=%SYS_OPT% -Dbsloader.mainclass=ag.gwi.app.comm.jaif.JAIFTool
echo. MeinBefehl | @%JAVA_HOME%\bin\java.exe %SYS_OPT% -jar "%~dp0\bsld.jar" -console localhost:1099 >> C:\myLog.txt  
An dieser Stelle stellt | einen Pipe-Operator dar, >> ist ein Command redirection Operator, der die Ausgabe der Ausführung an ein Textfile anhängt.

Zu diesem Thema mal ein paar Jahre in der Zeit zurück gereist: Command Redirection

Ich hoffe, ich habe deine Aufgabe richtig verstanden.

Beste Grüße
Dominique
Sideshow88
Sideshow88 27.04.2015 aktualisiert um 13:44:05 Uhr
Goto Top
Hi Dominique,

Danke für die schnelle Antwort. Das mit dem Pipe-Operator habe ich auch schon einmal versucht (nur ohne das echo.). Leider funktioniert das nicht. Ich habe das Skript wie von dir vorgeschlagen folgendermaßen geändert:

@call "%~dp0\setbsld.bat"  
@set SYS_OPT=%SYS_OPT% -Dbsloader.noupdate=true
@set SYS_OPT=%SYS_OPT% -Dbsloader.mainclass=ag.gwi.app.comm.jaif.JAIFTool
"show status" | @%JAVA_HOME%\bin\java.exe %SYS_OPT% -jar "%~dp0\bsld.jar" -console localhost:1099 > C:\Test.txt  
Die Konsole öffnet sich kurz und schließt sich wieder ohne ein Textfile zu erzeugen. Mit dem echo. am Anfang erzeugt er folgendes Textfile:

type 'help' for more information  
JAIF@localhost>Unknown Command: "show  
type 'help' for supported commands in current modus  
JAIF@localhost>
Hast du noch eine Idee?

LG
Clijsters
Clijsters 27.04.2015 um 12:11:24 Uhr
Goto Top
Ja klar ;)
Also, die Ausgabe von "show status" wird heißen: "Der Befehl "show" ist entweder falsch geschrieben oder konnte nicht gefunden werden." bzw. das anderssprachige Pendant
Da die CMD ihn ja nicht kennt. Deswegen springt die Console wohl wieder weg.
Dafür das vorangesetzte echo.

Nimm eventuell doch mal den Punkt weg. Eine meiner schlechten Gewohnheiten. Damit rückt er den String ein Space weiter.
Vielleicht mag er das nicht.

Beste Grüße
Dominique
Sideshow88
Sideshow88 27.04.2015 aktualisiert um 12:37:45 Uhr
Goto Top
Leider funktioniert das auch ohne den Punkt nicht.
Vielleicht gibts hier andere Zeichen als ", die zwei Wörte als einen Befehl deklarieren?


lg
Clijsters
Clijsters 27.04.2015 um 12:37:22 Uhr
Goto Top
Nein, nicht ganz.
Die CMD versucht den Befehl auszuwerten und das Ergebnis dann an die Console zu senden.
Also musst du dafür sorgen, dass das Ergebnis dein eigentlicher Input ist und nicht andersherum. Das Echo wird also nicht mit gesendet.

Schonmal versucht, ob sich die JAIF-console einen Schalter kennt, um direkt mitgelieferte Befehle auszuwerten und zu beenden?
Sideshow88
Sideshow88 27.04.2015 aktualisiert um 12:41:16 Uhr
Goto Top
Wenn ja, kenne ich sie nicht. Und den Dienstleister habe ich auch schon gefragt, ob es Möglichkeiten gibt, konnte mir aber nicht helfen. Vielleicht habe ich da aber auch nur den falschen Mann an der Leitung gehabt :S
Sideshow88
Sideshow88 27.04.2015 um 12:44:41 Uhr
Goto Top
Hat sich erledigt. Ohne die " ging es dann. Vielen vielen Dank für deine Hilfe. Dann kann ich ja in selbiges Skript die Zeilen einfügen für das erstelle Textfile nach Wörtern zu durchsuchen?!

LG
Clijsters
Clijsters 27.04.2015 um 12:50:47 Uhr
Goto Top
Du hast echo show status in Anführungszeichen gesetzt? :D

Ja klar, das könntest Du machen. Achte aber erst darauf, dass die JAIF-Console (und damit das Batch samt CMD) sich nach Ausführung des show status beenden.
Sonst läuft das Batch unendlich lang, ehe es beginnt, das Textfile zu durchsuchen.


Beste Grüße
Dominique
Sideshow88
Sideshow88 27.04.2015 um 12:58:35 Uhr
Goto Top
Ne habe das show status in Anführungszeichen gesetzt > "show status"

Natürlich nicht mit dem echo :P

Ok. Dann versuch ich mein Glück. Danke dir face-smile