Search the FirstSpirit Knowledge Base
Hallo zusammen,
im Anschluss zu unserem Deployment, muss eine Batch-Datei auf dem Webserver gestartet werden,
woran ich leider scheiter.
Rufe ich die .exe im Skript direkt auf funktioniert das einwandfrei
exec("//172.***.**.***/inetpub/App-Preview/de/content/Index.exe ); |
jedoch ist es nun erforderlich die .exe über eine Batch-Datei auf dem Webserver zu starten.
wenn ich jedoch
exec("//172.***.**.***/inetpub/batch/index.bat"); |
aufrufe, dann hängt die Aktion und wenn ich auf dem Webserver im Taskmanager schaue, ist auch die .exe die in der .bat aufgerufen wird nicht aktiv.
Hatte jemand schon mal solch ein Problem?
Habe auch hier schon gesucht und nur https://community.e-spirit.com/people/hoebbel/blog/2010/07/21/ver%C3%B6ffentlichen-ohne-sprachverzei...
gefunden, das hat mir jedoch auch nicht weiterhelfen können.
viele Grüße
Tobias
Hallo Tobias,
müsste hier nicht als Prozess cmd.exe aufgerufen werden mit der .bat als Parameter?
Viele Grüße
Michael
Hallo Michael,
falls du das so meinst, dann funktioniert das auch nicht.
exec("cmd.exe /c //172.***.***.**/inetpub/batch/index.bat"); |
viele Grüße
Tobias
Hallo Tobias,
exec("cmd.exe /c //172.***.***.**/inetpub/batch/index.bat");
sieht für mich eigentlich auch richtig aus.
Erhältst du irgendeine Fehlermeldung? Erzeugt der neue Prozess einen Error-Output?
Viele Grüße
Tim
Hallo Tim,
nein so wie es aussieht wird der Befehl nicht ausgeführt.
ich hab vor und nach dem exec-Befehl eine Logausgabe, die Meldung vor dem exec sehe ich im Log... mehr nicht. ich muss den Auftrag dann aber auch abbrechen weil einfach nichts passiert.
Das ganze ist aber auch in einem try-catch, sofern es einen Fehler geben würde, würde er ja in den catch-Zweig springen.
viele Grüße
Tobi
Hallo Tobias,
macht die Bat denn noch mehr, als nur die Exe aufzurufen? Nicht, dass sie auf irgendeine Benutzereingabe o.Ä. wartet...
Gruß,
Tim
Hallo Tobias,
konntest du dein Problem inzwischen lösen? Oder weißt du mittlerweile woran es liegen könnte? Dann wäre es gut, wenn du deine Lösung hier kurz beschreiben würdest, damit alle Community-Teilnehmer etwas davon haben.
Falls du noch Unterstützung benötigst, wäre die genaue FirstSpirit-Version, die bei euch im Einsatz ist, eine hilfreiche Information.
Viele Grüße
Martin
Hallo Tim,
nein die Bat macht nix anderes.
@Martin,
nein Problem besteht noch, werde sofern ich was hinbekomm,
hier die Antwort schreiben.
Grüße
Tobias
Hallo Tobias,
wir lösen das in einem Projekt so:
Script |
---|
//! Beanshell script = "C:/Program Files (x86)/FirstSpirit5/deployment/XXX/XXX.bat"; import java.util.*; tasklist = context.getTasks(); t = context.getTask(); s = t.getScheduleEntry(); p = s.getProject(); log = ""; // project id, schedule entry id, master language projectId = "" +p.getId(); scheduleEntryId = "" +s.getId(); language = p.getMasterLanguage().getAbbreviation().toLowerCase(); // Command-Stack cmd = new Vector(); cmd1 = new Vector(); cmd1.addAll(Arrays.asList(new String[]{script})); //cmd1.addAll(Arrays.asList(new String[]{projectId})); //cmd1.addAll(Arrays.asList(new String[]{scheduleEntryId})); //cmd1.addAll(Arrays.asList(new String[]{language})); cmd.add(cmd1); class StreamCapture extends Thread { InputStream i; boolean useErrlog; StreamCapture(InputStream inputstream, boolean useErrorlog) { i = inputstream; useErrlog = useErrorlog; } public void run() { try { InputStreamReader reader = new InputStreamReader(i); BufferedReader buffr = new BufferedReader(reader); String l = null; while ((l = buffr.readLine()) != null) { if(useErrlog) { context.logError(log + l); } else { context.logInfo(log + l); } } //buffr.close(); //reader.close(); } catch (IOException ex) { context.logError(log + " failed: " + ex); } } } for(c: cmd) { cmdstr = ""; for (String s : c) { cmdstr += " " + s; } cmdstr = "ProcessBuilder(" + cmdstr.substring(1) + ")"; context.logInfo(log + cmdstr); // Fixme: launch as Thread with given timeout try { Process p = new ProcessBuilder(c).start(); InputStream is = p.getInputStream(); StreamCapture stdout = new StreamCapture(p.getInputStream(), false); StreamCapture stderr = new StreamCapture(p.getErrorStream(), true); stdout.start(); stderr.start(); result = p.waitFor(); //is.close(); if ( result == 0 ) { context.logInfo(log + " command completed"); } else { context.logError(log + "failed with exitcode " + result + " for " + cmdstr); // wait 3 seconds as otherwise stderr is closed too early // to get all error messages. Thread.sleep(3000); } } catch (InterruptedException e) { context.logError(log + "timeout for " + cmdstr + ": " + e); } catch (Exception e) { context.logError(log + "failed for " + cmdstr + ": " + e); } } context.logInfo(log + " script completed"); |
Vielen Dank Daniel! Das Script nach schnellem überfliegen recht brauchbar aus. Vielleicht hilft es ja Tobias weiter
viele Grüße
Martin