- 전체
- JAVA 일반
- JAVA 수학
- JAVA 그래픽
- JAVA 자료구조
- JAVA 인공지능
- JAVA 인터넷
- Java Framework
- Java GUI (AWT,SWING,SWT,JFACE)
- SWT and RCP (web RAP/RWT)[eclipse], EMF
JAVA에서 쉘프로그램 실행시키기
2015.07.12 18:31
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 프로그램 실행하기|작성자 현수림
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
오늘 나간 사이트에서 주기적으로 실행되는 쉘이 있었다.
그 쉘 안에는 디비 계정에 관련된 정보가 담겨져 있었고, 고객사에서는 디비 계정을 암호화 시켜줄 것을 요청하였다.
처음에는 쉘의 내용을 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();
}
}
}
위의 코드중에 볼드로 표현된 배열부분중에 앞의 두곳이 중요하다. 저 부분이 빠지고 그냥 쉘 스크립트만 실행을 하면 제대로 동작을 하지 않는다.
윈도우에서는 별 문제없이 동작하는 것 같다. ㅎㅎ
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.

