Processbuilder
자바에서 리눅스 명령어를 실행할 수 있는 메소드.
사용 예는 아래와 같다.
// 명령어를 저장할 String AllayList 선언
List<String> list = new ArrayList<>();
// ssh 접속 + 타임아웃, StrictHostKeyChecking 옵션
list.addAll(Arrays.asList("ssh", "-o", "ConnectTimeout="+monitoringConfig.getTimeout(), "-o", "StrictHostKeyChecking=no", user + "@" + targetIP));
// docker inspect 명령어 활용하여 pid 체크
list.addAll(Arrays.asList("docker", "inspect", "-f", "\"{{ .State.Pid }} {{ .Name }}\""));
list.add(process);
ssh 터널링을 통해 PID를 체크하기 위한 명령어이며
유의할 점으로는 공백을 단위로 따로따로 추가해주어야 한다는 점이 있다.(list.add("docker ps -a") 와 같이 공백을 사용하면 오류 발생!)
// 리눅스 명령어 실행으로 프로세스 체크 시작
ProcessBuilder builder = new ProcessBuilder(list); // 명령어를 인자로 사용
builder.redirectErrorStream(true); //표준 출력, 표준 에러를 리다이렉트한다.
java.lang.Process p = builder.start();
BufferedReader std = new BufferedReader(new InputStreamReader(p.getInputStream()));
String outputLine = "";
while ((outputLine = std.readLine()) != null) {
//outputLine으로 표준 출력, 표준 에러를 활용할 수 있다.
}
'java' 카테고리의 다른 글
[java] ExecutorService 와 Runnable, Callable을 통한 async (기초 예제 + 매우 기초 지식) (3) | 2021.05.28 |
---|