본문 바로가기
언어/JAVA

리눅스 OS에 명령어 보내기

by 이민우 2022. 7. 21.
728x90
반응형

Java 프로그램이 OS내 자원을 주기적으로 관리해야 하는 요구사항이 생겼다.

 

이에 해당 요구사항 구현을 위해 구글링을 해본 결과 ProcessBuilder를 사용하는 것이 간편해보여 이를 통해 구현을 완료했고, 언제든 사용할 수 있도록 해당 내용을 저장하고자 한다.

 

import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
=
@Service
public class SomeService {
	Logger logger = LoggerFactory.getLogger(SomeService.class);

   public void runCommand(String userId) throws Exception {
      // StringBuffer를 통해 OS에 전달할 메시지 작성
      StringBuffer command = new StringBuffer();
	  
      command.append("...");
      command.append("...");
      command.append("...");
	  
	  // bash -c 이후 해당 명령어가 올 수 있도록 리스트 구성
      String[] commandList = new String[] { "bash", "-c", command.toString() };
	  
	  // 명령어 실행
      runLinuxCommand(commandList);

   }

   public void runLinuxCommand(String[] commandList) throws Exception {

      logger.debug(" @@@ OS Command Start : " + commandList[2]);

      ProcessBuilder processBuilder = new ProcessBuilder(commandList);
      Process process = processBuilder.start();

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

      String line;
      while ((line = reader.readLine()) != null) {
         logger.debug(" @@@ OS Command Result : " + line);
      }

      int exitCode = process.waitFor();
      logger.debug(" @@@ OS Result : {}" + exitCode);
   }

}
728x90
반응형

'언어 > JAVA' 카테고리의 다른 글

1970년 01월 01일 00시 00분 00초  (0) 2023.03.17
JDBC 사용법  (0) 2022.07.25
[JAVA] 온점 단위 Split  (0) 2022.03.10
[JAVA] Call by Value & Call by reference  (0) 2021.04.29
[JAVA] == vs equals vs hashCode  (0) 2021.03.30