Unable to execute Linux command from Java
Hi,
I am currently working on a code wherein i need to execute Linux command from Java. Below are some of the query i have.
1) Is there any efficient method of running OS commands from Java, rather than using Runtime and Process method.
2) Below is details of my code which fails in execution
**-- Java Version**
java version "1.6.0"
OpenJDK Runtime Environment (build 1.6.0-b09)
OpenJDK Server VM (build 1.6.0-b09, mixed mode)
-- Program Code ----
Where <path> = Path i put myself
package test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.*;
public class GetInode{
* @param args
public static void main(String[] args) {
GetInode test = new GetInode();
test.getInode();
public void getInode(){
String command = "/usr/bin/stat -Lt <path>;
System.out.println(command);
Process process;
Runtime rt;
try{
rt = Runtime.getRuntime();
process = rt.exec(command);
InputStreamReader isr = new InputStreamReader(process.getErrorStream());
BufferedReader bre = new BufferedReader(isr);
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream());
System.out.println(bre.readLine());
System.out.println(br.readLine().split(" ")[7]);
process.destroy();
}catch (Exception ex){
System.out.println("Error :- " + ex.getMessage());
------Output -------------
/usr/bin/stat -Lt "<path>"
/usr/bin/stat: cannot stat `"<path>"': No such file or directory
Error :- null
Can any one help me what is wrong and why i am unable to run the Linux command from Java.
For clarity purpose............i m submitting actual code here
--- Code ---
package test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.*;
public class GetInode{
* @param args
public static void main(String[] args) {
GetInode test = new GetInode();
test.getInode();
public void getInode(){
String command = "/usr/bin/stat -Lt \"/afs/inf.ed.ac.uk/user/s08/s0898671/workspace/CASWESBLIN/TestFS/01_FIL_01.txt.txt\"";
System.out.println(command);
Process process;
Runtime rt;
try{
rt = Runtime.getRuntime();
process = rt.exec(command);
InputStreamReader isr = new InputStreamReader(process.getErrorStream());
BufferedReader bre = new BufferedReader(isr);
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
System.out.println(bre.readLine());
System.out.println(br.readLine().split(" ")[7]);
process.destroy();
}catch (Exception ex){
System.out.println("Error :- " + ex.getMessage());
--- Output ---
[ratz]s0898671: java GetInode
/usr/bin/stat -Lt "/afs/inf.ed.ac.uk/user/s08/s0898671/workspace/CASWESBLIN/TestFS/01_FIL_01.txt.txt"
/usr/bin/stat: cannot stat `"/afs/inf.ed.ac.uk/user/s08/s0898671/workspace/CASWESBLIN/TestFS/01_FIL_01.txt.txt"': No such file or directory
Error :- null
-- Linux Terminal --
If i copy the first line from the output and execute on Linux terminal her is the output that i get
[ratz]s0898671: /usr/bin/stat -Lt "/afs/inf.ed.ac.uk/user/s08/s0898671/workspace/CASWESBLIN/TestFS/01_FIL_01.txt.txt"
/afs/inf.ed.ac.uk/user/s08/s0898671/workspace/CASWESBLIN/TestFS/01_FIL_01.txt.txt 12003 24 81a4 453166 10000 1c 360466554 2 0 1 1246638450 1246638450 1246638450 4096
Can you just assist me where am i really making mistake.......i was wondering if the command that i pass from Java....can be executed on Linux terminal why is it faling to run from java.........and when i print the Error Stream for process output........it show cannot Stat.......
Similar Messages
-
How to execute Linux command from Java app.
Hi all,
Could anyone show me how to execute Linux command from Java app. For example, I have the need to execute the "ls" command from my Java app (which is running on the Linux machine), how should I write the codes?
Thanks a lot,You can use "built-in" shell commands, you just need to invoke the shell and tell it to run the command. See the -c switch in the man page for your shell. But, "ls" isn't built-in anyays.
If you use exec, you will want to set the directory with the dir argument to exec, or add it to the command or cmdarray. See the API for the variants of java.lang.Runtime.exec(). (If you're invoking it repeatedly, you can most likely modify a cmdarray more efficiently than having exec() decompose your command).
You will also definitely want to save the returned Process and read the output from it (possibly stderr too and get an exit status). See API for java.lang.Process. Here's an example
java.io.BufferedReader br =
new java.io.BufferedReader(new java.io.InputStreamReader(
Runtime.getRuntime().exec ("/sbin/ifconfig ppp0").
getInputStream()));
while ((s = br.readLine()) != null) {... -
Execute linux command from java
I wanna execute linux command from java, bu the output has error:
Return code = 1
top: failed tty get
The code as:
import java.io.*;
public class Execute {
public static void main(String[] args) {
try {
final Process process = Runtime.getRuntime().exec("top");
new Thread() {
public void run() {
try {
InputStream is = process.getInputStream();
byte[] buffer = new byte[1024];
for (int count = 0; (count = is.read(buffer)) >= 0;) {
System.out.write(buffer, 0, count);
} catch (Exception e) {
e.printStackTrace();
}.start();
new Thread() {
public void run() {
try {
InputStream is = process.getErrorStream();
byte[] buffer = new byte[1024];
for (int count = 0; (count = is.read(buffer)) >= 0;) {
System.err.write(buffer, 0, count);
} catch (Exception e) {
e.printStackTrace();
}.start();
int returnCode = process.waitFor();
System.out.println("Return code = " + returnCode);
} catch (Exception e) {
e.printStackTrace();
}Help please.Your code is probably good to run a program, that does not use terminal capabilities.
Program "top" is a little bit more complicated - you have to run it with a real terminal.
Try to run "xterm -e top". You can find an example how to run an external program
from java code in cnd/gdb module on http://cnd.netbeans.org
For example, take a look at openExternalProgramIOWindow() method on this page:
http://cnd.netbeans.org/source/browse/cnd/gdb/src/org/netbeans/modules/cnd/debugger/gdb/proxy/Attic/GdbProxyCL.java?rev=1.1.2.6.2.5&only_with_tag=release551_fixes&view=markup
It runs a command with external terminal.
Thanks,
Nik -
Problem in executing Linux command from Java Programme.
hi everybody,
can anybody help me to solve one problem i have.
i want to capture the output of linux command "grep" in my java programme.but it is not working properly .(maybe this sub-process doesn't have permission to read files)
here is my code and corresponding outputs.
import java.io.*;
public class BSearch
public static void main(String kj[])
try
Runtime rt=Runtime.getRuntime();
String command="grep \"hello\" -r /usr/MyDir ";
Process rtProc=rt.exec(command);
InputStream is=rtProc.getInputStream();
BufferedReader br =new BufferedReader(new InputStreamReader(is));
String line =null;
while((line=br.readLine()) != null)
System.out.println(br.readLine());
br.close();
catch(Exception e)
System.err.println("Error in command "+e);
it finds "hello" pattern only in BSearch.class file although if i fire this command on LINUX prompt it
shows all the files in /usr/MyDir which contain "hello" pattern.
java programme output :
Binary file /usr/MyDir/BSearch.class matches.
linux command output :
/usr/MyDir/one.txt: hello sdfs
Binary file /usr/MyDir/BSearch.class matches.
/usr/MyDir/two.txt: kjsdf hello sdfsdf
will anybody help me solve this problem.It may be a Problem of Catching the Echoes back from the Processes...I have a Program which Captures the Echoes..see if it works
import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import java.beans.PropertyChangeSupport;import java.lang.ref.WeakReference;/** * Implements a proxy property change listener using a weak reference to avoid memory locking that would occur if it * was a strong reference. To understand this, we hve to understand that the property change listeners themselves are * hilding onto panels and other objects with strong java references. If the panel goes away while we are viewing an * object, we have a circular emory hold situation where the panel cant be collected because it has ahold of the * property and the property cannot because it has ahold of the pane. If we use weak references instead, then the hard * link between the listener and the producer is softened to almost nothing. */public class WeakPropertyChangeListener implements PropertyChangeListener { /** * A poperty change support object is included here so that the listener can remove * himself from the listeners if the reference internally goes to null. */ private PropertyChangeSupport pcs = null; /** Holds the weak reference to the real listener. */ private WeakReference weakRef = null; /** * Constructs a new Proxy object for the given support and listener. * @param pcs The property change support that this object will be using. * @param pcl The real listener. */ public WeakPropertyChangeListener(PropertyChangeSupport pcs, PropertyChangeListener pcl) { if (pcs == null) throw new NullPointerException("pcs"); if (pcl == null) throw new NullPointerException("pcl"); this.pcs = pcs; weakRef = new WeakReference(pcl); } /** @see <{PropertyChangeListener}> */ public void propertyChange(PropertyChangeEvent changeEvent) { Object referrant = weakRef.get(); if (referrant == null) { pcs.removePropertyChangeListener(this); } else { ((PropertyChangeListener)referrant).propertyChange(changeEvent); } } /** Returns true for comparison to referrant or this. */ public boolean equals(Object obj) { if (obj instanceof WeakPropertyChangeListener) return super.equals(obj); else if (obj != null)return obj.equals(weakRef.get()); else return false; }}// snipet public void addPropertyChangeListener(PropertyChangeListener listener) { this.propertyChangeSupport.addPropertyChangeListener( new WeakPropertyChangeListener(this.propertyChangeSupport, listener)); } public void removePropertyChangeListener(PropertyChangeListener listener) { this.propertyChangeSupport.removePropertyChangeListener(listener); } -
Executing linux command from Java code
Hi ,
I have a web application running on JBoss on Linux platform.
I need to execut certain shell command of linux through servlet or JSP, so that I can display the command results on UI.
If you have done something similer sort of thing then please shed some light on it.
TIA,
SachinSorry for the wrong post...please ignore this..
Thanks, -
Execute shell command from Java
Hi all,
I need some idea for executing shell script from Java programe.
For example i have start.sh script in /tmp/start.sh folder of unix server.
I want to execute shell script from local java code.
Any idea on this.Hi,
Read the following articles/posts, maybe this could help you:
How to execute shell command from Java
Running system commands in Java applications | java exec example | alvinalexander.com
Want to invoke a linux shell command from Java - Stack Overflow -
Execute operatingsystem commands from java classes?
How can I execute operatingsystem commands from my java classes?
So that I on a Linux box could i.e. execute "ls -l" etc.Also read this:
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html -
Executing shell commands from Java.
I want to execute shell commands in Java using the Runtime.exec( String ) method.
The method works fine under Linux OS, but under Windows '98 the method didn't work at all!
For example the following call: Runtime.exec( "dir" ) throws an exception showing that the command was not completed. If I replace dir with ls under Linux all is good. What is the problem with the Microsoft Windows '98 ? Is there any solution at my problem ?!
thx in advance!hey JSarmis,
You can help me... "ls" doesn't work for me on linux.. using Runtime.exec, some commands work, others don't... you may hold the key to what i need? How did u get "ls" to work? -
Execute unix commands from Java
Hi,
I have a client application running on windows. This client should connect to a unix server and check for the existence of a file and display the result as "File found/File not found". In order to connect from windows to the unix server, I used the sockets and the connection is successfully established. The second part is to check for the presence of the file in unix server. I searched in google.com and the option I found to execute a unix command from java is the "Runtime.exec()". Runtime.exec is considered as the less effective (not a favorable) one.
Is there any other option available (other than the Runtime) to execute the unix command from java? Can you please let me know.
Thanks a lot
AishuSo, please let me know how I can execute the above unix commands without Runtime.exec()You have a client and a server.
You want something to run on the server, not the client.
That means that something must in fact being running on the server before the client does anything at all.
For example telnet. Or a J2EE server application.
So is something like that running?
If not then there absolutely no way to do what you want, even with Runtime.exec().
If yes then what you do depends on what is running. So Runtime.exec() would be pointless if a J2EE server was running. -
Unable to execute sh file from java file on the solaris
hi all
i have written a java program through which i want to shutdown the weblogic server on the solaris.
I have written following code
static Runtime objruntime = null;
objruntime = Runtime.getRuntime();
Process objprocess=null;
String url = "/home/xxx/xxx/xxxx/xxxxx/stopWebLogic.sh";
try {
objprocess = objruntime.exec(url);
objprocess.destroy();
System.out.println("Server shutdown OK..");
} catch (Exception e) {
System.out.println("Error executing Cedera Server shutdown." + e);
I am able to execute the above code on the linux 7.1 means server get shutdown forcefully.
But when i am trying to execute above code on solaris, server is not getting shutdown.
Can anybody please help to solve this problem.
Thanks in advance
regards
andywe didn't got what you are trying to say..
what i want to achieve is...
we are having one condition check in Startup class if that condition becomes false we have to stop the weblogic from starting up.
if we execute same command posted previously from shell directly its' working fine.
we are using "csh" shell. we have also tried to execute the command as follows - " csh /home/xxxx/xxx/xxx/xxxxx/stopWebLogic.sh"
but no achievement.
it seems that "objruntime.exec(url);" is not able to invoke the shell script "stopWebLogic.sh". We have also checked the execute permission for the same.
Neither we are getting any error nor any message.
can u please give us some guide lines on how to achieve this. -
hi all,
i ve to exectue linux commands in background from within the jsp /servlet/Ejb .what code lines should i write or any other procedure to execute those.
i know u guys must ve done this before.
tcIf you was writing a standa alone Java application that runs top of J2SE, then you could use java.lang.Runtime.exec() apis to call an operating system command. But since you are writing a J2EE component, as per J2EE standard, you don't have the privileges to call Runtime.exec() api because that can lead to security hole. See section #6.2.3 of J2EE 1.4 platform spec (http://java.sun.com/j2ee/download.html#platformspec) for more details about security permission set available to a J2EE component.
Sahoo -
How to execute system command from java program
Hi all,
I want to change directory path and then execute bash and other unix commands from a java program. When I execute them separately, it's working. Even in different try-catch block it's working but when I try to incorporate both of them in same try-catch block, I am not able to execute the commands. The change directory command works but it won't show me the effects of the bash and other commands.
Suggestions??The code I am using is....
try
String str="cd D:\\Test";
Process p=Runtime.getRuntime().exec("cmd /c cd
"+str);your str string is already having cd in it but again you ar giving cd as part of this command also please check this,i will suggest you to remove cd from str
Process p1=Runtime.getRuntime().exec("cmd /c mkdir
"+str+"\\test_folder");you should say mkdir once you change your path,but here you are saying mkdir first and then cd D:\Test(this is because of str)..please check this
Process p2=Runtime.getRuntime().exec("cmd /c bash");
Process p3=Runtime.getRuntime().exec("cmd /c echo
himanshu>name.txt");
catch(IOException e)
System.err.println("Error on exec() method");
e.printStackTrace();
Message was edited by:
ragas -
hi friends,Iam used mysqldump command in linux platform to take backup of the database,its work properly....the command am used is
mysqldump -u root -p threadpool > sampledatabase.sql
I need to execute the same command in java....?Anyone here to know how to do that....?Thanks in advance........Crosspost:
http://forum.java.sun.com/thread.jspa?threadID=5185230&messageID=9721722#9721722
http://forum.java.sun.com/thread.jspa?threadID=5185199&messageID=9721587#9721587
Do not mess the forum. -
Execute DOS command from java application
Hello,
I want to execute a DOS command (MOVE, in order to move an image from a folder to an other) from a java application. How can I do this?
FrancescoYes I have tested it and it is working but only when executing a bacth file. For instance:
Runtime rt = Runtime.getRuntime();
try{
Process proc = rt.exec("move.bat");
}catch(Exception ex){
ex.printStackTrace();
}and the command in move.bat is:
move c:\\temp\\*.gif C:\\temp2
You don't have to use double slashes in batch files, only in Java. But anyway it is working both ways.
It is not working when you try to execute the command without the batch file:
Process proc = rt.exec("move c:\\temp\\*.gif C:\\temp2"); -> this will not work.
It should work. Try to execute another command to see what happens. -
Starting an executable system command from java
I'm new to Java and i was wondering : is it possible to start an executable from Java under Windows? If so, how?
ThanxThere are only about 9 billion responses a day on how to do this. Use the search feature.
Maybe you are looking for
-
Browse Data & Parameter flds no longer fully populated after upgd SQL 2005
I upgrade our SQL 2000 Server last weekend to SQL 2005 (sp2). Now our Crystal reports that access SQL data are not working correctly. Parameter Fields are showing little to no data, where before the upgrade we were seeing many more rows in the list.
-
Long Term Planning-Planning File Entry
Hi Gurus/Friends In the long term planning after PIR with inactive version and creating Scenario, assinging versions, Plants,....then during Release+Save it is giving the Result of Planning File Entries Logically the system has suppose to give the Nu
-
How do I reset an apple?
-
How to deactivate the Keyboard shortcuts (QuickTime PlugIn)
Hi, Is there a way, to Disable the Keyboard Shortcuts when using the QuickTime PlugIn within IE and/or Firefox ?
-
PrE9 - Dvd scene buttons not saving image (from MPG)
Hi All, New user to PrE9, I've used Premiere 6 pretty extensively in the past and just bought PrE9. Using PrE9 on Windows 7 Ultimate (64-bit). All latests drivers/patches/etc. are installed. I've tried creating a Dvd made up of some videos I have la