티스토리 뷰
Java(Spring)로 Shell Script실행 하기
백엔드를 하다보면 shell script를 쓸 일이 자연스럽게 많이 생깁니다.
제가 만든 프로그램을 배포할려면 서버 구성부터 띄우고 올리고 내리고 재부팅하고 등등 이걸 다 손으로 하자니 손이 너무 많이 가는데 나름 루틴한 작업들이 많습니다.
손으로 하는 작업을 반자동화라도 하기 위해 shell script를 쓰는데 쉘 스크립트를 실행 하려면 ssh로 들어가서 커맨드를 입력 해주어야 합니다.
하지만 ssh접속하고 로그인 하는 것도 일이기 때문에 api를 뚫어놓고 호출하는 방식으로 해결하고 싶다는 생각이 들었습니다.
자바에 찾아봤더니 해당 기능이 있었습니다. ProcessBuilder를 이용합니다.
ShRunner.java
public class ShRunner {
public Map execCommand(String... str) {
Map<Integer, String> map = new HashMap<>();
ProcessBuilder pb = new ProcessBuilder(str);
pb.redirectErrorStream(true);
Process process = null;
try {
process = pb.start();
} catch (IOException e) {
e.printStackTrace();
}
BufferedReader reader = null;
if (process != null) {
reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
}
String line;
StringBuilder stringBuilder = new StringBuilder();
try {
if (reader != null) {
while ((line = reader.readLine()) != null) {
stringBuilder.append(line).append("\n");
}
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (process != null) {
process.waitFor();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
if (process != null) {
map.put(0, String.valueOf(process.exitValue()));
}
try {
map.put(1, stringBuilder.toString());
} catch (StringIndexOutOfBoundsException e) {
if (stringBuilder.toString().length() == 0) {
return map;
}
}
return map;
}
}
public class ShRunnerTest {
ShRunner shRunner = new ShRunner();
@Test
public void name() throws IOException, InterruptedException {
String cmds = "sh /Users/Kyeongrok/hello.sh";
String[] callCmd = {"/bin/bash", "-c", cmds};
Map map = shRunner.execCommand(callCmd);
System.out.println(map);
}
}
실행은 위와 같이 ProcessBuilder pb = new ProcessBuilder(str);를 이용 하면 됩니다.
위 test code는 home에 hello.sh가 있으면 실행하는 명령입니다. 제 노트북의 홈은 /Users/Kyeongrok입니다. cd ~ 를 치면 pwd를 했을때 나오는 주소를 이용했습니다.
여기에 hello.sh가 있으면 실행되고 없으면 에러메세지가 나옵니다.
'Language > JAVA' 카테고리의 다른 글
java 현재 디렉토리(dir)에 어떤 파일, 디렉토리가 있나 보기 (0) | 2019.06.20 |
---|---|
Java Static이란? 사용 방법 내가 사용한 곳 (0) | 2019.04.09 |
시고저종 데이터 만들기 List -> Map -> List (0) | 2019.01.04 |
Java로 http request보내서 string 받기 with okhttp (0) | 2018.12.24 |
rxjava - return은 Flowable이 끝나고 될까? (0) | 2018.12.14 |
- Total
- Today
- Yesterday
- vim
- docker container case
- 도커컨테이너
- 도커티슈박스
- 싱가폴
- 도커티슈케이스
- 개발자
- docker container whale
- docker container tissue box
- 도커각티슈박스
- docker container
- 도커각티슈케이스
- Linux
- 이직
- shellscript
- docker container tissue
- Sh
- 2017 티스토리 결산
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |