[Java] 자바 리눅스 서버 쉘 스크립트 실행하는 방법

2022-11-29


Photo by Guille Álvarez on Unsplash


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