Linux bash script ausführen

Albatrox

Mitglied
Hallo Leute,

ich versuche gerade zu erreichen, dass mein Java Code einen Linux bash script ausführt, klappt soweit auch ganz gut, allerdings funktioniert es gerade nicht.

Java:
String cmd [] = {"sudo", "download.sh"};
Runtime.getRuntime().exec(cmd);

So in dem bash script sind mehrere wget anweisungen mit folgendem muster, bsp:
wget -P ~/meinPfad/ -N http://www.investing.com/equities/evotec-ag-technical

Zuerst habe ich es ohne String cmd gemacht und dann kam ein Berechtigungsfehler auf, dann habe ich es auf ein String array, wie oben geändert und jetzt läuft der Code durch, aber das bash script wird nicht aufgeführt?!

Vielen Dank schonmal für die Hilfe.
 

Bitfehler

Bekanntes Mitglied
Wie sah denn der Berechtigungsfehler aus?

Ich habe selber noch kein Bash-Skript aus Java heraus gestartet, aber die übergebenen Argumente sehen nicht wirklich korrekt aus. Download.sh ist sicherlich der Name des zu startenden Skripts, aber was willst du mit sudo an der Stelle bezwecken?
 

Baldur

Aktives Mitglied
Wenn du ein Programm mittels "sudo" startest, muss sich normalerweise der aktuelle Benutzer mit seinem Passwort authentifizieren. Wenn du das Skript mittels Runtime.exec startest wartet sudo auf die Passworteingabe, die aber fehlt.

Ich halte es allerdings generell für falsch, in deinem Programm irgendwo einen sudo-Aufruf zu verstecken. Theoretisch müsstest du ja hier dein Passwort per OutputStream an den Prozess senden. Das ist eigentlich keine gute Idee, und normalerweise sollte ein Programm ohne root-Rechte auskommen. Vor allem wenn du einfach nur irgendwelche Dateien runterladen willst.
Vielleicht ist irgendwo in deinem Skript ein falscher Pfad angegeben, so daß das Skript nicht wie gedacht auf dein Home-Verzeichnis zugreift, sondern irgendwo anders im Dateisystem?

Ansonsten beschreib mal deinen Berechtigungsfehler.. evtl hat dein Bashskript einfach kein x-bit gesetzt?
Das könntest du auch umgehehn wenn du das Skript auf diese Weise startest:
Java:
String cmd [] = {"bash", "download.sh"};
Runtime.getRuntime().exec(cmd);
 

Albatrox

Mitglied
Hallo zusammen, danke für die schnellen Antworten,

also das Problem mit der Berechtigung kam bei folgendem Code:
Java:
Runtime.getRuntime().exec("/usr/bin/Download.sh");

Die Fehlerausgabe ist die folgende:


Exception in thread "main" java.io.IOException: Cannot run program "/usr/bin/Download.sh": error=13, Keine Berechtigung
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)
at java.lang.Runtime.exec(Runtime.java:617)
at java.lang.Runtime.exec(Runtime.java:450)
at java.lang.Runtime.exec(Runtime.java:347)
at Code.test2.main(test2.java:11) -> ist die oben geschriebene Zeile

Habe gerade noch deine Variante, Baldur, getestet und das Programm läuft durch alle Schritte durch, aber es passiert nichts. Ween ich in eclipse das Terminal benutze und den gleichen Befehl dort eingebe werden die Daten heruntergeladen.
 

Baldur

Aktives Mitglied
Gibts denn einen bestimmten Grund dafür, daß dein Skript unter /usr/bin liegt? Vermutlich sind einfach keine Lese- bzw. Ausführungsrechte für normale Benutzer gesetzt. Die Berechtigungen siehst du mit "ls -la /usr/bin/download.sh" in der Konsole.
Am Besten wäre es, wenn dein Skript irgendwo im selben Verzeichnis wie dein Java-Programm liegt. Von da kannst du es dann auch einfach mittels "bash $skriptname" ausführen.

Generell sollte man unter Linux nichts als root machen, wo es nicht absolut notwendig ist.
 

Albatrox

Mitglied
Also Eigentürmer war root, habe ich auf mich geändert, aber das ist eigentlich egal oder?
Berechtigungen habe ich für alle auf rwx umgestellt, trotzdem werden die Daten nicht geladen.
 

Albatrox

Mitglied
Also ich habe no ein anderes bash script, welches eine pushbullet notiz schickt und das funtioniert über oben geschriebenen Code, auch im gleichen Ordner...
 

Baldur

Aktives Mitglied
Führst du das Skript immernoch per sudo aus oder mittlerweile nicht mehr? Hast du mal geprüft ob der Prozess noch irgendwelche Ausgaben schreibt? Was ist der Returncode von deinem Prozess?
Evtl kannst du nochnal prüfen, ob in deinem Skript alle Pfade korrekt sind.
 

Albatrox

Mitglied
nein nicht mehr per sudo, kommt auch keine Fehlermeldung. Ich habe immer ein system.out.println nach jedem schritt und die werden alle ausgegeben. Was mir noch aufgefallen ist, wenn ich nach dem "bash" noch ein leerzeichen lasse also "bash " dann wird der catch block aktiviert.
Dacht nur, wenn ich das Script ins Terminal eingeben würde, müsste ich auch n leer zwischen bash und /usr/bin... lassen.

Wie kann ich den returncode von dem Prozess ausgeben?
 

Baldur

Aktives Mitglied
Auf der Konsole brauchst du das Leerzeichen, um den Befehl von den Parametern zu trennen. Im Javacode hast du ja schon alles getrennt als jeweils einzelnes Element in deinem String-Array. Wenn du da noch Leerzeichen hinzufügst würde er nach einem Programm namens "bash<leerzeichen>" suchen. Mir ist auch aufgefallen, du hast download.sh schon einmal mit großem D und einmal mit kleinem d geschrieben. Unter Linux ist das ein Unterschied, hier wird zwischen Groß- und Kleinschreibung unterschieden, und das Skript wird evtl nicht gefunden, wenn der Name falsch geschrieben ist.

Den Returncode bekommst du mit process.exitValue(). Der sollte 0 sein, wenn alles Ok ist, und ungleich 0 bei Fehlern.
 

Bitfehler

Bekanntes Mitglied
Wenn du dein Programm auf der Konsole ausführst, dann schreibt doch mal in die (zweite) Zeile eines Skripts: set -x
Das Aktiviert den Debug-Modus und die Ausgaben werden auf die Konsole geschrieben. Dann wirst du erkennen können, an welchen Befehl es klemmt.
 

Albatrox

Mitglied
Hab den Fehler gefunden *Kopfgegenwandhau*

Also dadurch dass das Herunterladen einige Zeit braucht, der Programmcode aber direkt weitergeht, reicht die Zeit nicht aus um die Seiten herunterzuladen. Ich habe einen Thread.sleep eingebaut, jetzt hat das script die Zeit die es benötigt damit die Seiten heruntergeladen werden.

Trotzdem vielen Dank nochmal :D
Gruß
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Linux: Bash von Java aus aufrufen Allgemeine Java-Themen 10
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
M Eclipse unter Linux Lite Allgemeine Java-Themen 2
M priority scheduling in Linux Allgemeine Java-Themen 3
Killunox MaxHeap Zuweisung unter Linux funktioniert nicht Allgemeine Java-Themen 1
L Super User via Processbuilder (Linux) Allgemeine Java-Themen 3
OSchriever Linux-Programm öffnen Allgemeine Java-Themen 6
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
J Linux .jar beim Start automatisch ausführen Allgemeine Java-Themen 6
J ASCM - In Linux öffnen Allgemeine Java-Themen 3
L Tesseract-OCR 4.0 unter Linux funktioniert nicht Allgemeine Java-Themen 3
J Sound mit Clip in Linux abspielen Allgemeine Java-Themen 3
K USB infos unter Linux abfragen? Allgemeine Java-Themen 2
N Lizenzensierung von Java Programmen unter Linux Allgemeine Java-Themen 3
P OneWire Java Linux Allgemeine Java-Themen 11
R probleme beim starten von jar unter linux Allgemeine Java-Themen 2
C Windows RCP Application unter Linux bauen lassen Allgemeine Java-Themen 3
D jnativehook auf Linux Allgemeine Java-Themen 1
A Linux: Native Library mit Rootrechten ohne Prozess mit sudo zu starten Allgemeine Java-Themen 1
F Linux & NetBeans: Datei in Systemverzeichnis schreiben? Allgemeine Java-Themen 1
E Sonderzeichen nicht setzbar: Großes Problem bei Programmierung unter Linux Mint mit Virtual Box Allgemeine Java-Themen 5
F URI Schema in Linux erstellen? Allgemeine Java-Themen 3
D Problem VLC4J Raspbian(Linux) Allgemeine Java-Themen 0
M Code läuft unter windows aber nicht unter Linux Allgemeine Java-Themen 6
F.S.WhiTeY JDK installieren Linux: Nach Update link auf Java zerschossen Allgemeine Java-Themen 4
M Java auf Linux und Windows Allgemeine Java-Themen 6
D pfad zur jre linux Allgemeine Java-Themen 8
B Ordner öffnen mittels Java in Linux-Umgebung Allgemeine Java-Themen 7
P Eclipse Unter Windows erstelle .jar unter Linux (Ubuntu) funktioniert nicht Allgemeine Java-Themen 5
G Linux/C++/Pthreads auf JVM zugreifen, thread safe? Allgemeine Java-Themen 10
G Runtime.exec beendet Programm unter Linux, wenn Java Programm beendet wird Allgemeine Java-Themen 3
G RXTX native library unter Linux in jar build angeben Allgemeine Java-Themen 4
R Umlautproblem unter Linux Allgemeine Java-Themen 10
Gossi Mit Java auf Linux- & Windowssysteme zugreifen? Allgemeine Java-Themen 4
T Jar File läuft unter Windows aber nicht unter linux Allgemeine Java-Themen 10
Z Probleme bei Stringvergleichen (Windows/Linux) Allgemeine Java-Themen 10
M Linux Rechner per ssh runterfahren mit Java Allgemeine Java-Themen 8
F Process.getInputStream unter Linux Allgemeine Java-Themen 7
J Java programm lässt sich in win7 nach linux install nicht mehr ausführen Allgemeine Java-Themen 18
G Input/Output URLDecoder.decode - Unterschiedliche Ergebnisse Windows / Linux Allgemeine Java-Themen 2
G Java und Syslog (Linux) Allgemeine Java-Themen 3
T Javaprogramm unter Linux auf bestimmten Kern starten/laufen lassen ? Allgemeine Java-Themen 22
D Unix/Linux Benutzer-Authentifikation über Java Allgemeine Java-Themen 3
B JNA, Linux und die Smart Card Allgemeine Java-Themen 2
P Runnable Jar File über Windows ausführbar doch über Linux nicht Allgemeine Java-Themen 8
C RXTX Treiber einbinden für Linux Allgemeine Java-Themen 6
C Datei auslesen wie unter Linux mit "tail -f" Allgemeine Java-Themen 3
E Linux Cups Allgemeine Java-Themen 6
S Verhalten von System.getenv() in Ubuntu / Linux Allgemeine Java-Themen 12
T linux problem mit Desktop.getDesktop().open(..) Allgemeine Java-Themen 5
lordcarlos Runtime exec und mplayer (linux) Allgemeine Java-Themen 11
J dialogys unter linux Allgemeine Java-Themen 4
S Problem beim Drucken auf Netzwerkdrucker unter Linux Allgemeine Java-Themen 9
T System Preferences + LInux (Ubuntu) Allgemeine Java-Themen 8
R Timing-Problem (?) Linux versus Windows Allgemeine Java-Themen 13
F Document öffnen unter Linux Allgemeine Java-Themen 4
F Portzugriffe Java @Linux & Windows? Allgemeine Java-Themen 4
W Deployment unter Linux Allgemeine Java-Themen 17
D Mit Linux mehrere Kommandos in einem Subprozeß Allgemeine Java-Themen 3
E Erfahrung mit RXTX sowie Windows und Linux Allgemeine Java-Themen 9
J Externes Programm starten und stoppen (Linux) Allgemeine Java-Themen 3
B Programm läuft unter Linux, aber nicht unter Windows Allgemeine Java-Themen 3
J UTF-8 Sockets : Windows<->Linux Ein altes Problem Allgemeine Java-Themen 7
S Ausführbare Scriptdatei unter Linux erstellen Allgemeine Java-Themen 6
J Programm unter Linux starten Allgemeine Java-Themen 3
R Jar-File vom Linux Desktop durch ancklicken starten? Allgemeine Java-Themen 5
P Linux port Allgemeine Java-Themen 4
P CLASSPATH LINUX Allgemeine Java-Themen 9
L Programm läßt sich wegen Java unter Linux nicht starten Allgemeine Java-Themen 4
V JAR-File läuft unter Windows und Linux, aber nicht unter OSX Allgemeine Java-Themen 6
M Welches Linux zum Java testen? Allgemeine Java-Themen 5
D linux shell aus java öffnen Allgemeine Java-Themen 5
A Linux-Consolenbefehle über Java ausführen? Allgemeine Java-Themen 2
B Java Applikation incl. dll unter Linux ausführen? Allgemeine Java-Themen 11
G Java Socket langsam unter Linux Allgemeine Java-Themen 21
T *.jar applikationen auf Linux installieren Allgemeine Java-Themen 4
P jdic/Linux Allgemeine Java-Themen 2
G Linux Dateinamen Charset Probleme Allgemeine Java-Themen 8
Ark Linux: Shell-Skript zum Kompileren und Starten Allgemeine Java-Themen 4
N Linux-Commands über Java Anwendung ausführen Allgemeine Java-Themen 12
M Eigenes Java-Server-Programm unter Linux steuern? Allgemeine Java-Themen 13
P linux + java :/ Allgemeine Java-Themen 11
G Läuft nicht unter Linux oO Allgemeine Java-Themen 10
S Java Entwicklungsumgebungen unter XP und Linux und weitere F Allgemeine Java-Themen 7
W Programm starten unter Linux Allgemeine Java-Themen 10
M Speicherverwaltung unter Linux Allgemeine Java-Themen 7
A Geschwindigkeit Java unter Linux Allgemeine Java-Themen 9
J jdic funktioniert unter Linux nicht Allgemeine Java-Themen 18
S Welche Javaversion ist in meinem Linux? Allgemeine Java-Themen 2
L Native Threads unter Linux? Allgemeine Java-Themen 2
V JVM OutofMemory Linux geht, windows nicht Allgemeine Java-Themen 3
L mit exec() befehl ausführen ( OS X / Linux) Allgemeine Java-Themen 8
B JMF -> Webcam (Linux) Allgemeine Java-Themen 14
B Java 6 unter Ubuntu (Linux) Allgemeine Java-Themen 4
B gibVerzeichnis() unter linux Allgemeine Java-Themen 9
D JMF unter Linux/Windows, nichts funktioniert Allgemeine Java-Themen 3
F Runtime.getRuntime().exec mit Linux und Leerzeichen Allgemeine Java-Themen 3
L javax.comm unter Linux Allgemeine Java-Themen 11
G Zugriff von Windows auf Linux Allgemeine Java-Themen 11
M Wie mit Dateipfaden zwischen Linux und WIndows hantieren? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben