![]() |
|
|
|||||||
| Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern |
|
|
|
Themen-Optionen | Thema durchsuchen | Ansicht |
| #1 (permalink) | |
|
Benutzer
int
Registriert seit: 03.06.2009
Fachbeiträge: 63
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
|
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");
}
}
}
Geändert von byron1778 (03.06.2009 um 10:42 Uhr) |
|
|
| #2 (permalink) | |||
|
Stammbenutzer
Viertel Gigabyte
Registriert seit: 05.01.2007
Fachbeiträge: 4.906
Abgegebene Danke: 57
Erhielt 542 Danke für 523 Beiträge
|
versuchs mal mit:
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.
__________________
Ich bin keine Signatur, ich headbang hier nur! |
||
|
|
| #3 (permalink) | |
|
Benutzer
int
Themenstarter
Registriert seit: 03.06.2009
Fachbeiträge: 63
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
|
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 ..." 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(" ");
|
|
|
| #4 (permalink) | |
|
Java-Forum Team
Moderator
Registriert seit: 11.05.2004
Fachbeiträge: 6.733
Blog-Einträge: 3
Abgegebene Danke: 4
Erhielt 51 Danke für 40 Beiträge
|
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..
__________________
Wir machen Fehler aus Versehen, die anderen aus Dummheit. (Gabriel Laub) Pur Java Registry Reader - http://sourceforge.net/projects/java-registry/ |
|
|
| #5 (permalink) | |
|
Benutzer
int
Themenstarter
Registriert seit: 03.06.2009
Fachbeiträge: 63
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
|
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: "); }
Geändert von byron1778 (03.06.2009 um 09:27 Uhr) |
|
|
| #6 (permalink) | |
|
Benutzer
int
Themenstarter
Registriert seit: 03.06.2009
Fachbeiträge: 63
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
|
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);
|
|
|
| #7 (permalink) | |
|
Java-Forum Team
Moderator
Registriert seit: 11.05.2004
Fachbeiträge: 6.733
Blog-Einträge: 3
Abgegebene Danke: 4
Erhielt 51 Danke für 40 Beiträge
|
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).
__________________
Wir machen Fehler aus Versehen, die anderen aus Dummheit. (Gabriel Laub) Pur Java Registry Reader - http://sourceforge.net/projects/java-registry/ |
|
|
| #8 (permalink) | |
|
Stammbenutzer
Viertel Gigabyte
Registriert seit: 05.01.2007
Fachbeiträge: 4.906
Abgegebene Danke: 57
Erhielt 542 Danke für 523 Beiträge
|
du meinst, der letzte Parameter sollte ">> somefile" sein und würde funktionieren (im Fall, dass man es ohne bash -c machen würde)?
__________________
Ich bin keine Signatur, ich headbang hier nur! |
|
|
| #9 (permalink) | |
|
Java-Forum Team
Moderator
Registriert seit: 11.05.2004
Fachbeiträge: 6.733
Blog-Einträge: 3
Abgegebene Danke: 4
Erhielt 51 Danke für 40 Beiträge
|
Nö, gerade das letzte >> darf nix separates sein, weil das kein explizites Kommano ist sondern halt die Umleitung!
__________________
Wir machen Fehler aus Versehen, die anderen aus Dummheit. (Gabriel Laub) Pur Java Registry Reader - http://sourceforge.net/projects/java-registry/ |
|
|
|
| Themen-Optionen | Thema durchsuchen |
| Ansicht | |
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Unix Shell Subroutine ausfuehren | Gast1 | Java Basics - Anfänger-Themen | 3 | 30.12.2008 14:54 |
| Verzeichnisse mit Inhalt verschieben auf UNIX | Lombak | Java Basics - Anfänger-Themen | 5 | 21.04.2008 20:51 |
| Owner (UNIX) | coco_der_Affe | Java Basics - Anfänger-Themen | 2 | 26.03.2007 15:13 |
| Double-Click f. alle Komps UNIX u. WIN verschieden ? | gast | AWT, Swing, JavaFX & SWT | 5 | 03.08.2005 10:43 |
| Vi-Editor von UNIX mit Java (RMI) | Flyer | Netzwerkprogrammierung | 2 | 06.01.2005 12:10 |
| Lesezeichen |
|
|