2022-11-29
1. 방법
방법은 ProcessBuilder를 사용하는 방법이다. 유틸 형식으로 분리 후 모듈 형식으로 사용하면 편하게 사용할 수 있다. 매개 변수 dir 은 쉘 스크립트가 위치하는 경로를 나타낸다. shellName(은) 말 그대로 실행시킬 쉘 스크립트의 이름을 나타낸다.
메서드 안에 변수 cdExec를 보면 리눅스 서버에서 매개변수로 주어진 dir로 경로를 옮긴 후 매개변수로 주어진 shellName으로 만들어진 쉘 스크립트를 실행하는 것을 확인할 수 있다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;
@Component
@Slf4j
public class ShellScriptUtils {
public String execShellScriptBuilder(String dir, String shellName) {
String cdExec = "cd " + dir + " && ./"+shellName;
String [] command = {"/bin/sh","-c", cdExec};
String result = "";
log.info("dir ->" + dir);
log.info("shellName ->" + shellName);
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command(command);
try {
// Run script
Process process = processBuilder.start();
// Read output
StringBuilder output = new StringBuilder();
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
output.append(line);
}
if(output.toString().equals("")) {
result = "success";
}else {
log.info(output.toString());
result = output.toString();
}
} catch (Exception e) {
result = "fail";
}
return result;
}
}
메인 이미지 출처 : Photo by Guille Álvarez on Unsplash