JAVA에서 쉘프로그램 실행시키기


public int getExecuteCommand(String fileName) throws Exception {


  int result = 0;


//UNIX 명령어 저장할 String 배열 선언

  String[] exec = new String[3];


//Runtime 객체 생성
  Runtime r = Runtime.getRuntime();


/* IP 받아오기

- Shell 파일이

test_110.sh,

test_111.sh

두 개가 있는데 서버의 IP 맨 뒷자리 3글자로 구분지어서 실행 시켜주려고 그랬다.

*/

  InetAddress address = InetAddress.getLocalHost();
  String myIp = address.getHostAddress();
  myIp = myIp.substring(myIp.lastIndexOf(".")+1, myIp.length());
 
  exec[0] = "/bin/sh";//정확히는 모르겠지만 Shell 파일 구동 전 써주는 것 같다.
  exec[1] = "/home/";//Shell 파일 위치 절대경로 입력
  exec[1] += "test_"+myIp+".sh";//Shell 파일명
  exec[2] = fileName;//전송할 파일명
 

  InputStream inputStream = null;
  BufferedReader bufferedReader = null;
 
  try{
    Process process = r.exec(exec);//참고사항 : Process 선언 안하고 r.exec() 만 하면 실행되지 않는다.


//참고사항 : 이 부분을 안해주면 Shell 구동이 안된다.
    process.getInputStream();
   
    inputStream = process.getInputStream() ;
    bufferedReader = new BufferedReader( new InputStreamReader( inputStream ) ) ;

    while(true) {
     String info = bufferedReader.readLine() ;
     if( info == null || info.equals( "" ) ){
      break ;
     }
     logger.info( info ) ;
    }
   
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally {
   try{if(inputStream!=null)inputStream.close();}catch(Exception e){}
   try{if(bufferedReader!=null)bufferedReader.close();}catch(Exception e){}
  } 
  return result;
 }


[출처] Java에서 UNIX Shell 프로그램 실행하기|작성자 현수림

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

오늘 나간 사이트에서 주기적으로 실행되는 쉘이 있었다.

그 쉘 안에는 디비 계정에 관련된 정보가 담겨져 있었고, 고객사에서는 디비 계정을 암호화 시켜줄 것을 요청하였다.

처음에는 쉘의 내용을 java 로 다시 짜야하나?? 라는 생각을 하다가 문득, java 자체에서 쉘 스크립트를 실행시킬 수 없을까? 라는 생각이 들었다.

암호화된 계정정보를 properties 파일에 넣고 해당 정보를 읽어 복호화하여 java 파일내에서 쉘 스크립트를 실행하면 간단히 해결될 것 같았다.

역시나, 구글링은 많은 정보를 준다. ^^;

java.lang 패키지에 있는 Runtime 을 사용하면 간단하게 쉘 스크립트를 실행할 수 있다.


public class Test{
        public static void main(String[] args){
                String[] command = {"/bin/sh","-c","실행시킬 쉘 스크립트"};
                int i;
                try{
                        Process ps = Runtime.getRuntime().exec(command);
                        ps.waitFor();
                        System.out.println(ps.exitValue());
                        ps.destroy();
                }catch(Exception e){
                        e.printStackTrace();
                }
        }
}

 

위의 코드중에 볼드로 표현된 배열부분중에 앞의 두곳이 중요하다. 저 부분이 빠지고 그냥 쉘 스크립트만 실행을 하면 제대로 동작을 하지 않는다.

윈도우에서는 별 문제없이 동작하는 것 같다. ㅎㅎ

 

 

[출처] http://imnuz.net/entry/JAVA%BF%A1%BC%AD-%BD%A9%C7%C1%B7%CE%B1%D7%B7%A5-%BD%C7%C7%E0%BD%C3%C5%B0%B1%E2

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
18 스프링(Spring) 프레임워크 기본 개념 강좌 (7) - Patterns 졸리운_곰 2017.10.02 262
17 스프링(Spring) 프레임워크 기본 개념 강좌 (6) - Dynamic Proxy 졸리운_곰 2017.10.02 257
16 스프링(Spring) 프레임워크 기본 개념 강좌 (5) - AOP Proxy file 졸리운_곰 2017.10.02 309
15 스프링(Spring) 프레임워크 기본 개념 강좌 (4) - AOP file 졸리운_곰 2017.10.02 288
14 스프링(Spring) 프레임워크 기본 개념 강좌 (3) - IoC file 졸리운_곰 2017.10.02 379
13 스프링(Spring) 프레임워크 기본 개념 강좌 (2) - 주요 구성 요소 & DI file 졸리운_곰 2017.10.02 323
12 스프링(Spring) 프레임워크 기본 개념 강좌 (1) - 스프링 이해하기 file 졸리운_곰 2017.10.02 573
11 Spring - IoC & DI file 졸리운_곰 2017.10.02 238
10 MyBatis 기본 - selectList file 졸리운_곰 2016.06.07 494
9 Mybatis ResultMap 그리고 select 졸리운_곰 2016.06.07 424
8 Cliche Command-Line Shell file 졸리운_곰 2015.07.12 726
7 [스프링] 스프링 Java 어노테이션 file 졸리운_곰 2014.06.11 961
6 [스프링] 스프링 MVC 졸리운_곰 2014.06.11 533
5 [스프링] 어노테이션 졸리운_곰 2014.06.11 1033
4 [Spring] @Autowired 와 Java Spring 졸리운_곰 2014.01.29 1332
3 [Spring] 내가 Spring을 사랑하는 다섯 가지 이유 file 가을의 곰을... 2013.12.22 970
2 [Spring] VO 객체의 복사 가을의 곰을... 2013.11.26 4289
1 [Spring] Spring MVC Basics file 가을의 곰을... 2013.10.09 918
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED