实际开发中,经常会遇到java需要调用/得到shell脚本的返回值,进行下一步开发,所以我写了一个工具类,供以后大家使用。
process2.sh:
#!/bin/bash
function process(){
#echo $1,$2,$3,$4,$5
#if [[ $1 -eq 0 && $2 -eq 0 && $3 -eq 1 && $4 -eq 1 && $5 -eq 1 ]]
#then
#return 200
#fi
if [[ $1 -eq 0 && $2 -eq 0 && $3 -eq 2 && $4 -eq 2 && $5 -eq 2 ]]
then
#return 0
echo 0
fi
if [[ $1 -lt 1 && $2 -lt 1 ]]
then
if [[ $3 -eq 1 || $4 -eq 1 || $5 -eq 1 ]]
then
killall 雪盈证券
killall stockAlert
ps -ef|grep chromedriver|awk '{print $2}'|xargs kill -9
sleep 1
nohup /Users/a123/Downloads/chromedriver-v10.1.2-mas-x64/chromedriver >> chromedivier.out &
sleep 1
nohup java -jar stockAlert-1.0-SNAPSHOT-jar-with-dependencies.jar >> stockAlert.out &
sleep 1
echo "" > ./stock_log_file.log
sleep 1
#return 2
echo 2
fi
if [[ $3 -gt 2 || $4 -gt 2 || $5 -gt 2 ]]
then
killall stockAlert
killall 雪盈证券
#killall chromedriver
ps -ef|grep chromedriver|awk '{print $2}'|xargs kill -9
sleep 1
nohup /Users/a123/Downloads/chromedriver-v10.1.2-mas-x64/chromedriver >> chromedivier.out &
sleep 1
nohup java -jar stockAlert-1.0-SNAPSHOT-jar-with-dependencies.jar >> stockAlert.out &
sleep 1
echo "" > ./stock_log_file.log
sleep 1
#return 3
echo 3
fi
fi
if [[ $1 -eq 1 || $2 -eq 1 ]]
then
#echo 'stock-realtime-web disconnect!!!!'
#echo 'restart service'
killall stockAlert
killall 雪盈证券
#killall chromedriver
ps -ef|grep chromedriver|awk '{print $2}'|xargs kill -9
sleep 1
nohup /Users/a123/Downloads/chromedriver-v10.1.2-mas-x64/chromedriver >> chromedivier.out &
sleep 1
nohup java -jar stockAlert-1.0-SNAPSHOT-jar-with-dependencies.jar >> stockAlert.out &
sleep 1
echo "" > ./stock_log_file.log
sleep 1
#return 3
echo 3
fi
if [[ $1 -gt 1 || $2 -gt 1 ]]
then
#echo 'connect disconnected or refused'
killall stockAlert
killall 雪盈证券
#killall chromedriver
ps -ef|grep chromedriver|awk '{print $2}'|xargs kill -9
sleep 1
nohup /Users/a123/Downloads/chromedriver-v10.1.2-mas-x64/chromedriver >> chromedivier.out &
sleep 1
nohup java -jar stockAlert-1.0-SNAPSHOT-jar-with-dependencies.jar >> stockAlert.out &
sleep 1
echo "" > ./stock_log_file.log
sleep 1
#return 3
echo 3
fi
}
killall 雪盈证券
killall stockAlert
ps -ef|grep chromedriver|awk '{print $2}'|xargs kill -9
counter=`rg -w "stock-realtime-web disconnect" ./stockAlert.out | tail -n 1 | wc -l`
counter2=`rg -w "Connection refused" ./stockAlert.out | tail -n 1 | wc -l`
counter3=`ps -ef|grep "雪盈证券"|awk '{print $2}'|wc -l`
counter4=`ps -ef|grep "stockAlert"|awk '{print $2}'|wc -l`
counter5=`ps -ef|grep "chromedriver"|awk '{print $2}'|wc -l`
#echo $counter,$counter2,$counter3,$counter4,$counter5
process ${counter} ${counter2} ${counter3} ${counter4} ${counter5}
#res=`echo $?`
#echo res=${res}
//首先java调用shell脚本,即先触发客户端保护机制
String command="sh /Users/a123/Downloads/process2.sh";
//retCode = 0表示正常,没有触发客户端保护机制
int retCode = Integer.parseInt(CommandHelper.execCommand(command).trim());
// int retCode=JaveShellUtil.ExecCommand(command);
System.out.println("返回码retCode="+retCode);
//说明触发了客户端保护机制
if(retCode > 0){
System.out.println("触发保护机制了");
Thread.sleep(10000);
}
CommandHelper:
import java.io.BufferedReader;
import java.io.InputStreamReader;
/**
* 此类用来执行Command命令
*
* @author zhangyuexu
* @date 2021-02-08 14:16
*
*/
public class CommandHelper {
public static String execCommand(String cmd) {
Process process = null;
BufferedReader br = null;
StringBuilder sb = new StringBuilder();
try {
process = Runtime.getRuntime().exec(cmd);
br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
// System.out.println(line);
sb.append(line+"\n");
}
} catch (Exception e) {
return "";
} finally {
try {
if (process != null) {
process.destroy();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return sb.toString();
}
public static void main(String[] args) {
String command="sh /Users/xueqiu/Desktop/xueqiu-alarm/example/src/main/resources/process2.sh";
System.out.println(CommandHelper.execCommand(command));
}
}
java执行shell命令/执行linux命令,得到字符串返回值:
String connectionCMD = "gtimeout 60 rg -w "+stock+ " /Users/a123/Downloads/stock_log_file.log | wc -l";
String connectionCommandResult = AlarmTest.execCommand(connectionCMD).responseMsg.trim();
if(Integer.parseInt(connectionCommandResult.trim()) < 1){
System.out.println(stock+" stock-realtime-web disconnect="+connectionCommandResult);
++j;
// dataTotalMap.put(stock,"disconnect");
//表示1轮股票都没有数据 --即10支股票都没有数据
if(j >= 10) {
System.out.println("循环1轮即10支股票均没数据");
dateLst.add(System.currentTimeMillis());
dataTotalMap.put("type",1);
symbolDateMap.put(stock,dateLst);
symbolsLst.add(symbolDateMap);
dataTotalMap.put("symbols",symbolsLst);
return dataTotalMap;
}
}
String shellCMD = "gtimeout 60 rg -w "+stock+ " /Users/a123/Downloads/stock_log_file.log | tail -n 1";
CommandResult commandResult = AlarmTest.execCommand(shellCMD);
// System.out.println(commandResult);
Thread.sleep(1000);
String s = commandResult.responseMsg;
if(StringUtils.isEmpty(s)){
System.out.println(stock+"为空");
// AlarmWrapper.getInstance().sendMsg(rule, "告警:"+status+",异常报警升级,"+stock+" PANKOU,QUOTE此时均没推数据");
dateLst.add(System.currentTimeMillis());
dataTotalMap.put("type",1);
symbolDateMap.put(stock,dateLst);
// return dataTotalMap;
//continue;
}
本文介绍了在实际开发中如何通过Java调用Shell脚本并获取其返回值,提供了一个实用的工具类,适用于后续的开发工作。
1532

被折叠的 条评论
为什么被折叠?



