Questions & Answers

TWidmayer
Elite Observer

.bat-File auf Webserver starten

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

0 Kudos
9 Replies
mbergmann
Crownpeak employee

Hallo Tobias,

mรผsste hier nicht als Prozess cmd.exe aufgerufen werden mit der .bat als Parameter?

Viele GrรผรŸe

Michael

0 Kudos

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 Kudos

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 Kudos

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 Kudos

Hallo Tobias,

macht die Bat denn noch mehr, als nur die Exe aufzurufen? Nicht, dass sie auf irgendeine Benutzereingabe o.ร„. wartet...

GruรŸ,

Tim

0 Kudos
mikula
Crownpeak employee

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 Kudos

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 Kudos

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 Kudos

Vielen Dank Daniel! Das Script nach schnellem รผberfliegen recht brauchbar aus. Vielleicht hilft es ja Tobias weiter

viele GrรผรŸe

Martin

0 Kudos

Type a product name