ESalimov
I'm new here

Shell Skript ausführen

Hallo zusammen,

ich stehe gerade vor einem Problem und brauche Eure Hilfe.

In einem projektspezifieschen Generierungsauftrag muss ein Skript ausgeführt werden. Das Skript muss einen Ordner erstellen, wenn der Ordner noch nicht existiert.

#!/bin/bash

if [ ! -d /mnt/company_tomcat/content ]

then

    mkdir -p /mnt/company_tomcat/content

fi;

Die createContentFolder.sh habe ich unter "/opt/firstspirit5/shared/scripts/createContentFolder.sh" gespeichert.

Um Shell skript auszuführen habe ich die folgende FS-Script:

import java.util.*;

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(l);
   } else {
    context.logInfo(l);
   }
  }
  //buffr.close();
  //reader.close();
} catch (IOException ex) {
  context.logError( " failed: " + ex);
}
}
}

// Hier wird das bzw. die Dateikommandos zusammengebaut
cmd = new Vector();

cmd1 = new Vector();

//für Linux:
cmd1.add("/opt/firstspirit5/shared/scripts/createContentFolder.sh");

cmd.add(cmd1);


for(c: cmd) {
cmdstr = "";
for (String s : c) {
  cmdstr += " " + s;
}
cmdstr = "ProcessBuilder(" + cmdstr.substring(1) + ")";
context.logInfo(cmdstr);
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();
  if ( result == 0 ) {
   context.logInfo("command completed");
  } else {
   context.logError("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("timeout for " + cmdstr + ": " + e);
} catch (Exception e) {
  context.logError("failed for " + cmdstr + ": " + e);
}
}

Fehlermeldung :

ERROR 23.06.2014 09:52:33.465 (de.espirit.firstspirit.impl.access.ScriptContextImpl): failed for ProcessBuilder(/opt/firstspirit5/shared/scripts/createContentFolder.sh): java.io.IOException: Cannot run program "/opt/firstspirit5/shared/scripts/createContentFolder.sh": error=13, Permission denied

Was mache ich falsch und wie kann man das Problem beheben.

Ich bedanke mich im Voraus.

Viele Grüße,

Emil.

0 Kudos
2 Replies
kscheuing
I'm new here

ERROR 23.06.2014 09:52:33.465 (de.espirit.firstspirit.impl.access.ScriptContextImpl): failed for ProcessBuilder(/opt/firstspirit5/shared/scripts/createContentFolder.sh): java.io.IOException: Cannot run program "/opt/firstspirit5/shared/scripts/createContentFolder.sh": error=13, Permission denied

In welchem Nutzer wird denn die FirstSpirit JVM ausgeführt ? Scheint als ob dieser Nutzer kein execute recht hat das .sh auszuführen.

Ein chown des Skriptordners in den entsprechenden User Kontext, bzw. ein chmod sollte das Problem beheben.

0 Kudos

Hallo Emil,

benötigst Du noch weitere Hilfe oder hat Dir Kais Antwort bereits geholfen?

In diesem Fall wäre es super, wenn Du seine "richtige Antwort" entsprechend markierst. Solltest Du zwischenzeitlich eine eigene Lösung

gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.

Viele Grüße

Michaela

0 Kudos