java执行linux脚本
题主是否想询问“linux一个终端执首旁行多个java-jar脚本的操作步骤”linux一个终端执行多个java-jar脚本,具体链槐步骤如下:
1、打开棚芹友终端,进入jar包所在的目录。
2、使用Java命令执行第一个jar包,执行一个名为test1.jar的jar包。
3、执行第一个jar包后,可以按Ctrl+C组合键停止该进程。
4、使用Java命令执行第二个jar包,执行一个名为test2.jar的jar包。
5、重复上述步骤,执行其他jar包。
② 求教:Linux下Java应用程序的重启脚本
这个是startup.sh的脚本
#!/bin/bash
java -Xms512m -Xmx1024m -classpath lib/antlr-2.7.6.jar:lib/commons-collections-3.2.jar:lib/jta.jar ...... xx.MainClass%1 %2
java -cp "$CLASSPATH" xx.MainClass> console.log & echo $! > MainClass.pid &
MainClass是我服务器的启动入口main所在的类.
脚本也是看到网上其他朋友写的,这个脚本在服务器启动的同时将pid写到MainClass.pid中下面的是restart.sh脚本
#!/bin/bash
cat MainClass.pid | xargs kill -9
java -Xms512m -Xmx1024m -classpath lib/antlr-2.7.6.jar:lib/commons-collections-3.2.jar:lib/jta.jar ...... xx.MainClass%1 %2这个脚本就是先关闭pid为MainClass.pid的进程
然后再启动.
问题是在服务器启动后,利用ps -aux查看进程,没有发现MainClass.pid的值
java.exe的pid是另外一个值...
③ 如何在java程序中调用linux命令或者shell脚本
java程序是提供了这个一方法,Processpro=Runtime.getRuntime().exec(cmds);
但是一般来说,尽量去用一些其他脚本(lua,shell,python)去执行一系列linux命令比较灵活, 而且耗费资源少。但是Runtime.getRuntime().exec()这种调用方式在java虚拟机中是十分消耗资源的,即使命令可以很快的执行完毕,频繁的调用时创建进程消耗十分可观。
java虚拟机执行这个命令的过程是,首先克隆一条和当前虚拟机拥有一样环境变量的进程,再用这个新的进程执行外部命令,最后退出这个进程。频繁的创建对CPU和内存的消耗很大。
下面是一个调用linux命令的例子:
publicclassTest{
publicstaticvoidmain(String[]args)throwsException{
String[]cmds={"/bin/sh","-c","ps-ef|grepjava"};
Processpro=Runtime.getRuntime().exec(cmds);
pro.waitFor();//阻塞,直到上述命令执行完
InputStreamin=pro.getInputStream();
BufferedReaderread=newBufferedReader(newInputStreamReader(in));
Stringline=null;
while((line=read.readLine())!=null){
System.out.println(line);
}
}
}
注:参数中逗/bin/sh逗 逗-c逗 是可以用shell执行指定的命令的意思
这里/bin/sh -cps -ef|grep java,会执行ps linux命令
④ java在linux中执行shell脚本,用telnet检测指定IP的端口是否可以连接上
你可以增加两个进程,一个用来监视telnet的输出,另外一个用来监视是不是有错。你分析那个telnet的输出就好了。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class ExcuteThread extends Thread {
private String name;
public ExcuteThread(String name) {
this.name = name;
}
@Override
public void run() {
try {
Process p = Runtime.getRuntime().exec(name);
InputStream fis = p.getInputStream();
final BufferedReader brError = new BufferedReader(
new InputStreamReader(p.getErrorStream(), "gb2312"));
InputStreamReader isr = new InputStreamReader(fis, "gb2312");
final BufferedReader br = new BufferedReader(isr);
Thread t1 = new Thread() {
public void run() {
String line = null;
try {
while ((line = brError.readLine()) != null) {
// System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (brError != null)
brError.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
};
Thread t2 = new Thread() {
public void run() {
String line = null;
try {
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
t1.start();
t2.start();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally {
}
}
}
⑤ 通过java程序(JSch)运行远程linux主机上的shell脚本
通过Java程序运行远程Linux主机上的shell脚本是可能的,这需要借助JSch库来实现。
在使用之前,请确保远程主机已经开启SSH服务。接下来,通过Maven坐标引入JSch依赖库,以执行远程主机上的脚本。
创建名为“hello.sh”的文件,内容仅用于测试,即输出“hello ”。将此文件保存在远程主机的“/root”目录下,并为脚本设置可执行权限。
使用以下Java代码在本地执行远程主机上的shell脚本,代码中包含了详细的注释以说明其功能。执行后,可以在本地控制台获取远程主机上shell脚本的执行结果。
实例代码演示了如何实现远程Linux主机上的shell脚本执行。此外,代码可以通过进一步封装来提供更简便的使用方式。
总结,通过Java程序和JSch库可以轻松运行远程Linux主机上的shell脚本,并获取执行结果。