java 操作shell脚本执行docker命令  Runtime.getRuntime().exec()是不能执行特殊符号 如">" 、"|" 等 必须通过 "/bin/sh" "-c" 处理。

另外java操作docker  不能分配  docker exec -i(不要t).

另外如果不确定脚本是否执行成功,可以通过waitFor 返回的int结果,如果为0脚本执行成功  1失败。

或者根据扫描打印返回的line中具体报错信息,进行判断(网上很多示例,这里不详写了)。

 

具体命令代码如下:

List<String> commandArr = new ArrayList<>();
commandArr.add("/bin/sh");
commandArr.add("-c");
commandArr.add("docker exec -i mysql8 mysqldump --extended-insert=false -uroot -pxxxx database > /root/mysqlbackup/backup.sql");
String result = run(commandArr.toArray(new String[commandArr.size()]));
log.info("定时任务执行结果:" + result);

执行代码如下:

public static String run(String[] command) throws Exception {
Scanner input = null;
String result = "";
Process process = null;
try {
process = Runtime.getRuntime().exec(command);
try {
//等待命令执行完成
process.waitFor(10, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
InputStream is = process.getInputStream();
input = new Scanner(is);
while (input.hasNextLine()) {
result += input.nextLine() + "";
}
result = command + "" + result; //加上命令本身,打印出来
} finally {
if (input != null) {
input.close();
}
if (process != null) {
process.destroy();
}
}
return result;
}
posted on 2024-02-19 10:18  Mr.xiab  阅读(145)  评论(0编辑  收藏  举报