Ausführen, sh Datei aus Java
Ich versuche zum ausführen einer sh-Datei über den folgenden code (CentOS Maschine btw)
Runtime.getRuntime().exec("sh " + file.getPath());
Ich benutze diesen code für windows und es funktioniert
Runtime.getRuntime().exec("cmd /c start " + file.getPath());
Könnte es sein, denn ich bin mit dem Bildschirm in der .sh-Datei? Ich bin auch mit dem java-Befehl zum starten des server, also vielleicht brauche ich diese?
Hier der Inhalt der sh-Datei
#!/bin/sh
BINDIR=$(dirname "$(readlink -fn "$0")")
cd "$BINDIR"
screen -S PrivateServer java -Xms2048M -Xmx2048M -jar somejar.jar -o true
Ich bin auch dieser code ausgeführt von einem shutdown-hook, könnte dies das Problem sein? Dies ist beabsichtigt, da die software einen game-server und es ist bestimmt so, dass der Benutzer einen Neustart-Befehl oder automatisch neu starten, ohne setup alles selbst.
Edit: ich entschied mich für die Ausgabe der Fehler in einer Textdatei und diese "Müssen angeklemmt werden." irgendwelche Ideen? Ich glaube, das ist ein Problem, das zu tun mit die Verwendung von screen.
- Sind Sie sicher, dass die Datei ausführbar ist (z.B.
chmod +x filename
)? Überlegen Sie auch, mitgetRuntime().exec(new String[] {"sh",file.getPath()});
- Vielleicht ist die Schale nicht Parsen der Kommandozeile richtig. Was ist der Wert von
file.getPath()
? Überprüfen, dass die Datei ausgeführt wird, mit einer geeigneten Umgebung (path, etc.) Versuchen Sie eine einfache sh-Datei (z.B., eine, die meldet nur, dass es lief). - Ja die Datei ausführbar ist, wie ich es bin, der Sie ausführt, von der Konsole aus
- Tun, könnte dies etwas mit der Tatsache zu tun, dass ich bin läuft diese in einen shutdown-hook? Es soll ein anderes Programm, dass wird offen bleiben, bis Sie beendet wird. Dies ist gedacht als ein server-Befehl, so dass der Benutzer kann den server neu starten, über einen Befehl.
- Ich endlich den Fehler gefunden, entschieden, um es bei der Ausgabe einen Fehler melden und diese "Müssen angeklemmt werden." So wie ich das beheben kann?
- versuchen Sie, fügen Sie
-t
zu densh
- Befehl serverfault.com/questions/21806/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Sie bestätigt, dass die Datei ausführbar Erlaubnis, versuchen Sie, übergeben Sie das argument wie folgt:
Also vor allem den vollständigen Pfad für
sh
und verwenden-c
Yo brauchen, um die Berechtigungen für den Betrieb, die in der Regel die "sh" - Dateien erfordern eine Ausführung die Berechtigung zum ausführen dieses Skripts aus einer Java-Anwendung. Führen Sie die Java-Anwendung als root (sudo su) oder mit sudo java-jar. Oder legen Sie vollen Zugriff auf Ihr Skript mit "sudo chmod 777 ..." naja, nicht vollen Zugriff, aber mindestens chmod +x für alle Benutzer, die ausführen will Ihr Skript.
Beste Grüße.
Empfehle ich, mit org.apache.Unterhaus.exec.* um solch ein.
Scheint es nicht zu ausführbaren Berechtigungen, versuchen Sie es ausführen
"chmod +x shell_script_filename"
vor der Ausführung des shell-script