특정 Activity LifeCycle 에 기능을 구현할 때 Row Coupling 을 위한 코딩 방법


1) 위 기능에 대하여 Activity 를 상속받는 A 클래스를 만든다. (ServerCheckActivity)

2) A 클래스의 기능을 구현한다.

3) 기존의 Activity 들에 대하여 Activity 를 상속받지 않게 하고 A 클래스를 상속받도록 한다.

4) 기존 Activity 의 oncreate 등의 원하는 LifeCycle 에 A 클래스의 적절한 함수를 실행시킨다. (상속받았으므로 사용 가능)

5) 필요한 경우 Callback 함수를 만들어 쓴다.


이제 관련 기능은 A 클래스만 조작하면 될것이다.




원래는 A 클래스를 따로 빼낼려고 했으나, 작업하면 할수록 A 클래스 내에서 UI 이벤트 쪽 구현에 문제가 생겨

아예 Activity 를 상속받는 방안으로 생각하여 진행한 방법이다.


 보통은 사용자 마다 (리눅스의 User)

.bash_profile 등의 사용자 초기 실행설정에서 

JDK_HOME 이라던가, PATH 등을 정의한다.


 그런데, 한 사용자가 JDK 1.7에서만 돌아가는 프로그램과 JDK 1.8에서만 돌아가는 프로그램 두개를 동시에 돌리게 된다면 어떻게 될까?

둘 중 하나는 지원되지 않는 버전일테고, 그 지원되지 않는 버전일 경우 오류가 발생한다.(UnsupportedClassVersionError)


 이를 해결하기 위해서는 각 프로그램은 각각 다른 패스를 바라볼 필요가 있다.

즉, 패스 관리를 프로그램 별로 하는 것이다.

만약 Java 1.7, Mysql 4.8 기반의 프로그램 이라면 리눅스의 PATH 변수에 두 실행파일의 경로를 넣어주면 되는것이다.


위 내용을 스크립트로 관리하는 것이 아래 내용이다.



 


아래는 Bitnami 의 Redmine Stacks 에서 실제 사용하는 방법이다.


1. 다음과 같은 파일을 만들어서 PATH 부분에 실행할 경로를 넣는다.  (Bitnami Redmine Stack 의 use_Redmine 파일을 참조하였다.)

#use_Redmine 파일

#!/bin/sh

 

PATH="/home/nanum/BitnamiRedmineStack2.5.2/perl/bin:/home/nanum/BitnamiRedmineStack2.5.2/sqlite/bin:/home/nanum/BitnamiRedmineStack2.5.2/ruby/bin:/home/nanum/BitnamiRedmineStack2.5.2/subversion/bin:/home/nanum/BitnamiRedmineStack2.5.2/postgresql/bin:/home/nanum/BitnamiRedmineStack2.5.2/php/bin:/home/nanum/BitnamiRedmineStack2.5.2/mysql/bin:/home/nanum/BitnamiRedmineStack2.5.2/apache2/bin:/home/nanum/BitnamiRedmineStack2.5.2/common/bin:$PATH"

 

exec /bin/bash --noprofile --norc

 

만약 리눅스에 설치되어 있는 기본 JDK 가 1.5인데 1.6 버전을 쓰고싶다면 

PATH="jdk 경로:$PATH" 를 넣어주면 된다.

 

2.  ./"파일이름" 으로 실행하면 쉘이 바로 실행되는데 이 쉘 안에서 실행하고 싶은 프로그램을 돌리면 된다.


   * export PATH=~~~ 가 아닌 PATH=~~~~ 로 되어있다는 것을 알아둬야한다.

     export 명령어를 안썻으니 위의 PATH는 일회용인 것이다.



ex)

./use_Redmine

./redmineCtrl start


 

 

위 방법을 사용하게 된 계기

Jenkins 를 리눅스에서 실행하는데 버전이 낮아서 오류가 났다.

 

 root 의 암호조차 모르던 상태였기 때문에 위 방법을 사용하여 해결하게 되었다.

 

물론 path를 export 한 뒤에 입력해도 된다. 하지만 위 방법이 더 안정성 있다고 생각되고

 

불필요한 작업을 줄인다고 생각하기에 사용하게 되었다.

 

<파일 내용>

#java1.6.sh

#!bin/sh

PATH="/home/alm/jdk1.6.0_45/bin:$PATH"

exec /bin/bash --noprofile --norc


실행 : ./java1.6.sh

  ./Jenkins.jar



 



nohup "실행할 명령어" &

 

뒤에 & 의 의미는 백그라운드로 실행한다는 뜻이며

앞에 nohup 의 의미는 hang-up signal ​을 무시한다는 것을 뜻합니다. (터미널 접속종료, Ctrl+C 등 무시)

즉, 터미널이 끊겨도 그대로 실행됩니다.

그리고 nohup.out 파일에 output 이 로그 형태로 쌓이게 됩니다.


정지 방법은 해당 pid 를 찾아서 kill -9 하는 방법입니다.


 

 

출처 : http://antamis.egloos.com/678228 

+ Recent posts