.bat-File auf Webserver starten
Author: TWidmayer
Publication Date: 8/25/2016 10:00
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-sprachverzeichnis
gefunden, das hat mir jedoch auch nicht weiterhelfen können.
viele Grüße
Tobias
Tags: .bat, 5.2, auftrags-script, deployment, script, skript, webserver
-
Author: mbergmann - 8/25/2016 18:01
Hallo Tobias,
müsste hier nicht als Prozess cmd.exe aufgerufen werden mit der .bat als Parameter?
Viele Grüße
Michael
0 -
Author: TWidmayer - 8/26/2016 10:37
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
0 -
Author: pavone - 8/30/2016 9:36
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
0 -
Author: TWidmayer - 9/1/2016 12:07
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
0 -
Author: pavone - 9/9/2016 10:26
Hallo Tobias,
macht die Bat denn noch mehr, als nur die Exe aufzurufen? Nicht, dass sie auf irgendeine Benutzereingabe o.Ä. wartet...
Gruß,
Tim
0 -
Author: mikula - 10/7/2016 9:02
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
0 -
Author: TWidmayer - 10/10/2016 8:34
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
0 -
Author: danielbaer - 11/29/2016 10:53
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");
0 -
Author: mikula - 12/7/2016 20:55
Vielen Dank Daniel! Das Script nach schnellem überfliegen recht brauchbar aus. Vielleicht hilft es ja Tobias weiter
viele Grüße
Martin
0
Please sign in to leave a comment.
Comments
9 comments