728x90
반응형
SMALL
Java 에서 특정 shell script 를 실행해야 할 일이 생겨 ProcessBuilder 를 이용했다.
ProcessBuilder pb = new ProcessBuilder("/bin/sh", command);
try {
pb.redirectErrorStream(true);
Process proc = pb.start();
try (BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()))){
String line = null;
while ((line = br.readLine()) != null) {
rtnStr = line;
log.debug("shell script return data: {}", rtnStr);
}
}
} catch (Exception e) {
log.error("Error execute command : {}, \nException ", command, e);
}
아무 이상 잘 수행될 것 같으나
shell script 내용을 살펴 보니 상대경로로 (현재 경로에서 파일을 찾는 ./etc/abc.war) 수행되는 구절이 있었다.
이 때문에 shell script 실행 시 오류가 발생한다.
물론 Java Process 가 해당 shell script 의 위치와 동일한 곳에 있다면 문제되지 않겠지만 그렇지 않기 때문에
해당 경로로 이동한 후에 shell script 를 실행시켜줘야 문제가 되지 않는다.
ProcessBuilder 에서는 이를 해결하기 위해 directory() 라는 메서드를 제공하고 있다.
위 코드에서 directory 메서드만 추가 해 주면 해결된다.
ProcessBuilder pb = new ProcessBuilder("/bin/sh", command);
pb.directory(new File(path)); // <---- 이렇게 shell script 의 경로를 넣어준다.
try {
pb.redirectErrorStream(true);
...
...
728x90
반응형
LIST
'IT > JAVA' 카테고리의 다른 글
CompletableFuture 를 이용한 Mybatis 쿼리 여러개 동시 수행 (0) | 2022.06.24 |
---|---|
Ehcache Event Listener (0) | 2021.09.13 |
EventSource IE 처리 (Feat. Polyfill) (0) | 2021.05.07 |
Netty(6) - TCP Server with SSL (0) | 2021.02.19 |
Netty(5) - TCP/IP 파일 송수신 (0) | 2021.02.09 |