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腳本,並獲取執行結果。