Java 코드로 CMD 명령어 실행해 결과값 출력하기 :: 행복한 프로그래머

posted by 쁘로그램어 2018. 5. 16. 12:07

Java 코드로 CMD 명령어 실행해 결과값 출력하는 샘플 소스이다.

docker container 모니터링을 위해 REST API를 사용하려고 했더니,

docker 설정을 하면 안되는 상황이다 쩝;;


어쩔수 없이 unix domain socket을 사용해봐야하는데..

구글링해보니 java는 지원안해서 JNI 형태로 사용해야한다고 한다.

그래서 그냥 간단하게 CMD를 호출하는 형태로 갖다가 쓰려고 한다.


# Cmd.java

import java.io.BufferedReader;

import java.io.InputStreamReader;


public class Cmd {

private StringBuffer buffer;

private Process process;

private BufferedReader bufferedReader;

private StringBuffer readBuffer;

public String inputCommand(String cmd) {

buffer = new StringBuffer();

//buffer.append("cmd.exe");

//buffer.append("/c");

buffer.append(cmd);

return buffer.toString();

}

public String execCommand(String cmd) {

try {

process = Runtime.getRuntime().exec(cmd);

bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

String line = null;

readBuffer = new StringBuffer();

while((line = bufferedReader.readLine()) != null){

readBuffer.append(line);

readBuffer.append("\n");

}

return readBuffer.toString();

} catch (Exception e) {

e.printStackTrace();

System.exit(1);

}

return null;

}

}


# Docker.java

public class Docker extends Thread {

public void run() {

Cmd cmd = new Cmd();

while (true) {

try {

Thread.sleep(1000);

String command = cmd.inputCommand("curl --unix-socket /var/run/docker.sock http:/v1.24/containers/json");

String result = cmd.execCommand(command);


System.out.println(result);

} catch (Exception e) {

}

}

}

public static void main(String[] args) {

Docker docker = new Docker();

docker.start();

}

}


※ 참고 사이트 ※

http://hojak99.tistory.com/338