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;
}