[ Solved ]Unix Commando ausfuehren

Status
Nicht offen für weitere Antworten.

byron1778

Aktives Mitglied
Hallo Forum!

Ich habe mit meinem Programm folgendes Problem.
Ich will ein laengeres Unix Commando, welches auch eine laengere Laufzeit aufweist, in Java ausfuehren.
Leider jedoch erzeugt es absolut keinen Output, auch keine Fehlermeldungen.

Kann mir vll. jemand sagen, an was das liegen kann?
Bin leider noch nicht so bewandert in Java.

Danke Euch vielmals!

Code:
import java.io.*;
import java.lang.management.*;

public class Cfiles {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub

                String name = (new File("/opt/find/lock/find.lock")).getName();
                String lock = "/opt/find/lock/";
                String age_of_logfile_to_delete = "7";
                String logdirectory = "/opt/find/log";
                String log = "find.log_";
                String command = "find /opt -mtime 0 -print | grep -i -v netbeans | grep -i -v orc | grep -iv gate | grep -iv e2ereleases grep -iv orcbackup >> /opt/find/log/find.log";
                int c;


                // LOCK ueberpruefen

                /*              Runtime rt = Runtime.getRuntime();

                try {
                        Runtime rt = Runtime.getRuntime();
                        Process proc = rt.exec("find /opt/find/lock/find.lock " + lock + " -newer /opt/find/lock/find.lock");
//                      System.out.print("Process: " + proc + "\n");
                } catch (Throwable t)
                {
                        System.out.println("find.lock is newer");
                        t.printStackTrace();
              } */

        try{
                File file = new File("/opt/find/lock/find.lock");
                 if ( file.exists() ) {
                         System.out.println("File: " + file.getAbsolutePath());
                         System.out.println("Lock File is already existing");
                         System.exit(256);
                 }
                 else {
                         System.out.println("File: " + file.getAbsolutePath() + " nicht vorhanden");
                         String tb  = ManagementFactory.getRuntimeMXBean().getName(); {
                     //System.out.println("Process: " + tb + "\n");

                     try {

                             File datei = new File("/opt/find/lock/find.lock");
                             FileWriter PID = new FileWriter(datei);
                             // 2.2. schreiben
                             PID.write(tb); //ASCII Zahl => A
                             //      2.3. schliessen, sonst geschieht nichts!
                             PID.close();

                             // Programmablauf

[B][COLOR="Red"]                             Runtime r = Runtime.getRuntime();
                                Process p;
                                p = r.exec("find /opt -mtime 0 -print | grep -i -v netbeans | grep -i -v orc | grep -iv gate | grep -iv e2ereleases | grep -iv orcbackup >> /opt/find/log/find.log");[/COLOR][/B]
                                p.getErrorStream().close();
                                p.getOutputStream().close();
                                p.getInputStream().close();

                             System.out.println("PROC: " + p);

                             if (datei.exists()) {
                                 datei.delete();
                             }
                             System.out.println("File deleted");
                     }
                 catch(FileNotFoundException e) { }
                 catch(IOException e) { }

                 }
        }
        } finally {
                System.out.print("Look forward");
        }
       }
}
 
Zuletzt bearbeitet:

faetzminator

Gesperrter Benutzer
versuchs mal mit:
Java:
String[] findArgs = "find /opt -mtime 0 -print | grep -i -v netbeans | grep -i -v orc | grep -iv gate | grep -iv e2ereleases | grep -iv orcbackup >> /opt/find/log/find.log".split(" ");
p = r.exec(findArgs);

EDIT: du solltest AFAIK mit "bash -c" noch sicherstellen, dass pipen möglich ist. also zuerst explizit die bash aufrufen und die restlichen Argumente übergeben.
 

byron1778

Aktives Mitglied
Hallo!

Leider hat es auch so nicht funktioniert!
Ich habe in der Shell folgendes auch ausprobiert, wenn ich dich richtig verstanden habe:

Code:
bash -c "find ..."

Das hat auch ohne Probleme funktioniert, das Commando selber in der Bash funktioniert ebenso!

Ebenso hab ich folgendes ausprobiert:

Code:
String[] findArgs = "bash -c \"find /opt -mtime 0 -print | grep -i -v netbeans | grep -i -v orc | grep -iv gate | grep -iv e2
ereleases | grep -iv orcbackup >> /opt/find/log/find.log\"".split(" ");

Hat leider ebenso zu keinem Erfolg gefuehrt!
 

thE_29

Top Contributor
Ich würde schon alles in einem String lassen!
Also probier das was S gesagt hat nur ohne split! Und dann guck ob in die Datei was reinkommt.

Achja, eventuell ein Process.waitFor(); müsstest du einbauen. Weil wenn sich das Programm gleich beendet, wird das nix..
 

byron1778

Aktives Mitglied
Hm, hat leider auch nichts gebracht, weder mit String[] noch als String!

So sieht mein Code nun aus (habe noch ein exitValue eingebaut, da steigt er mit 1 aus - duerfte also nicht gefunkt haben, oder?)

Code:
  // Programmablauf

                             Runtime r = Runtime.getRuntime();

                             String findArgs = "find /opt -mtime 0 -print | grep -i -v netbeans | grep -i -v orc | grep -iv gate | grep -iv e2ereleases | grep -iv orcbackup >> /opt/find/log/find.log";
                             Process p = Runtime.getRuntime().exec(findArgs);
                  
                             try {
                             p = r.exec(findArgs);
                             p.waitFor(); 
                             int status=p.exitValue();
                             System.out.println("Test: " + status); } catch { InterruptedException e) { System.out.println("Test: "); }
 
Zuletzt bearbeitet:

byron1778

Aktives Mitglied
Ich konnte das Problem loesen, bzw. glaube ich, dass Faetzminator schon die richtige Loesung gepostet hatte, ich es leider nur falsch verstanden habe!

Code:
String[] findArgs = {"/bin/bash", "-c", "find /opt -mtime 0 -print | grep -i -v netbeans | grep -i -v orc | grep -iv gate | grep
 -iv e2ereleases | grep -iv orcbackup >> /opt/find/log/find.log"};

Process p = Runtime.getRuntime().exec(findArgs);

Danke Euch vielmals!
 

thE_29

Top Contributor
Ne, das ist ne Mischung von mehreren Strings und Parameter!
Das split(" ") hätte dir auch >> gesplittet und das ohne eine Datei geht nicht wirklich..

Du hast jetzt 3 Strings! Einmal den Befehl selbst und dann halt 2 Parameter (wobei der 2te ja mehrere Befehle sind).
 

faetzminator

Gesperrter Benutzer
du meinst, der letzte Parameter sollte ">> somefile" sein und würde funktionieren (im Fall, dass man es ohne bash -c machen würde)?
 

thE_29

Top Contributor
Nö, gerade das letzte >> darf nix separates sein, weil das kein explizites Kommano ist sondern halt die Umleitung!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Mr.Isaaaac [SOLVED] System Tray Popup MenüItem mit Icon? Java Basics - Anfänger-Themen 7
T [SOLVED] Java String equals funktioniert nicht Java Basics - Anfänger-Themen 5
W [Solved] String in Datum umwandeln Java Basics - Anfänger-Themen 5
M [SOLVED]update() bei MVC Java Basics - Anfänger-Themen 4
M [SOLVED]JComboBoxen dynamisch erstellen und abfragen Java Basics - Anfänger-Themen 2
M [SOLVED]Swing Event Management Java Basics - Anfänger-Themen 7
M [SOLVED]private Daten head - neues objekt? Java Basics - Anfänger-Themen 12
M [SOLVED]parameter übergabe an objekte Java Basics - Anfänger-Themen 2
G eine Knoten aus einem Baum löschen. [SOLVED] Java Basics - Anfänger-Themen 7
P Hallo.class auf Unix? Java Basics - Anfänger-Themen 12
F .jar File funktioniert in Unix nicht Java Basics - Anfänger-Themen 8
C Windows Java unter Unix Java Basics - Anfänger-Themen 2
A Unix-Zeit verkürzen Java Basics - Anfänger-Themen 2
P Date geht auf UNIX 1 Stunde nach Java Basics - Anfänger-Themen 14
P UNIX Command wird nicht ausgeführt Java Basics - Anfänger-Themen 2
M BufferedReader.readline() Unix/Windows Zeilenumbruch Java Basics - Anfänger-Themen 4
G Unix Shell Subroutine ausfuehren Java Basics - Anfänger-Themen 3
L Verzeichnisse mit Inhalt verschieben auf UNIX Java Basics - Anfänger-Themen 5
Lazybone Unix Time <-> normal Time Java Basics - Anfänger-Themen 3
G Unix Befehl ps unter Java Java Basics - Anfänger-Themen 2
G getRuntime().exec unix problem Java Basics - Anfänger-Themen 17
C Owner (UNIX) Java Basics - Anfänger-Themen 2
S String in Unix Timestamp Java Basics - Anfänger-Themen 11
M Unix Befehl aufrufen Java Basics - Anfänger-Themen 4
A Reguläre Ausdrücke der Pfade unter Windows und Unix Java Basics - Anfänger-Themen 3
J relative pfade windows/unix Java Basics - Anfänger-Themen 12
S Unix Timestamp entschlüssen Java Basics - Anfänger-Themen 6
S Datum in Unix-Timestamp umwandeln Java Basics - Anfänger-Themen 5
6 java mit -cp unter unix Java Basics - Anfänger-Themen 51
J java.lang.NoClassDefFoundError bei Java-Aufruf aus UNIX Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben