[jenkins] 에서 execute 셸 을 통 해 시 작 된 프로 세 스 가 죽 는 문제 입 니 다.

4068 단어 jenkins
[jenkins] 에서 execute 셸 을 통 해 시 작 된 프로 세 스 가 죽 는 문제 입 니 다.
jenkins 에서 배치 항목 을 자동 으로 업데이트 할 때 execute 셸 로 tomcat 를 시작/닫 으 면 tomcat 를 닫 을 수 있 지만 tomcat 를 시작 할 수 없습니다. 구축 은 실행 성공 을 표시 하지만 프로 세 스 를 보면 tomcat 가 시작 되 지 않 았 습 니 다.이 는 Jenkins 가 기본적으로 Build 가 끝 난 후에 모든 파생 프로 세 스 를 죽 이기 때문이다.다음 설정 을 해 야 이러한 상황 을 피 할 수 있 습 니 다.
1. 환경 변수 build 재 설정id
execute 셸 입력 상자 에 BUILD 추가ID = DONTKILLME, 시작 하 는 tomcat 프로 세 스 를 젠 킨 스 가 죽 이 는 것 을 방지 합 니 다.
2. 젠 킨 스 를 시작 할 때 젠 킨 스 가 파생 프로 세 스 를 죽 이 는 것 을 금지 합 니 다.
설정 수정 /etc/sysconfig/jenkins, JENKINS 에서JAVA_OPTIONS 에 가입 - Dhudson.util.ProcessTree.disable=true.여러 값, 빈 칸 으로 분리 해 야 합 니 다. jenkins 를 다시 시작 해 야 합 니 다. 이 방법 으로 한 번 설정 하면 모든 job 는 BUILD 를 설정 하지 않 아 도 됩 니 다.ID, 제 인 킨 스 가 시작 하 는 tomcat 프로 세 스 를 죽 이 는 것 을 방지 할 수 있 습 니 다.
- 예시:
BUILD_ID=DONTKILLME
ps -ef |grep tomcat8 |awk '{print $2}'|xargs kill -9
cd /opt/tomcat8/bin
sh ./shutdown.sh
sleep 40s
cd /opt/var/kms_conf/
sh ./tinykms.sh
cd /opt/tomcat8/bin
sh ./startup.sh
  • 부족 내부 에서 가끔 친구 들 이 execute 셸 에서 tomcat 를 시작 하지 못 하 는 이 유 를 물 어 본다. 왜 windows batch 에서 tomcat 를 시작 하지 못 하 는 지 등 문 제 를 묻는다. 사실은 대부분 상황 에서 시작 하지 못 하 는 것 이 아니 라 시작 한 후에 job 가 끝나 면서 프로 세 스 가 죽 어서 시작 할 수 없 는 가상 을 만 들 었 다 는 점 은 tomcat 로그 에서 볼 수 있다.해법 도 제 시 했 지만 본질 적 인 질문 에는 답 하지 않 고 주말 과 저녁 시간 을 이용 해 이 문 제 를 탐구 하고 정리 해 참고 하도록 했다.
  • Jenkins 는 job 가 실 행 될 때 만 든 하위 프로 세 스 를 효과적으로 죽 이기 위해 네 이 티 브 코드 를 제공 하여 찾 아 죽 였 습 니 다. 이렇게 하 는 것 은 매우 합 리 적 입 니 다. job 가 끝 날 때 실행 기간 에 시 작 된 프로 세 스 를 죽여 야 합 니 다. 그렇지 않 으 면 시스템 에 많은 좀 비 들 이 남 을 것 입 니 다.젠 킨 스 는 이 기능 이 각종 환경 에서 테스트 를 했다 고 주장 하지만 특수 환경 에서 발생 하 는 특수 한 상황 에 대처 하기 위해 이 기능 을 사용 하지 않 는 방법 을 제공 했다.
  • Jenkins 의 방법 은 매우 합 리 적 이지 만 문제 가 생 겼 습 니 다. 예 를 들 어 execute 셸 이나 windows batch 에서 시작 하 는 웹 응용 이 job 가 끝 난 후에 계속 실행 되 기 를 원 하 는 경우 두 가지 방법 으로 이 디 렉 터 리 에 도달 할 수 있 습 니 다. 다음은 소개 합 니 다.

  • 방법 1: Jenkins 가 제공 하 는 시작 매개 변 수 를 통 해 하위 프로 세 스 를 죽 이 는 기능 을 사용 하지 않 습 니 다.
    Jenkins 는 hudson. util. ProcessTree. disabl hudson. util. ProcessTreeKiller. disable 두 가지 속성 을 제공 하여 기능 을 제어 합 니 다. 값 은 true 이 며 이 기능 을 사용 하지 않 습 니 다.Hudson. util. ProcessTree. disable 은 Jenkins 1.260 부터 사용 되 며, 1.315 이전 Hudson 을 사용 할 때 Hudson. util. ProcessTree Killer. disable 만 사용 할 수 있 습 니 다. 버 전 호 환 을 위해 Jenkins 1.260 이후 이 두 속성 을 모두 사용 할 수 있 습 니 다. 1.260 의 Jenkins 사용 자 는 Hudson. util. ProcessTree. disable 속성 을 사용 하 는 것 을 권장 합 니 다.이런 방식 은 Jenkins 가 시작 되 기 전에 설정 해 야 한다. 다음은 필자 의 경험 에 따라 각종 사용 상황 에서 어떻게 설정 하 는 지, 누락 이 있 으 면 보충, 지적 을 환영한다.
    자바 - jar 로 시작, -Dhudson.util.ProcessTree.disable=true -jar jenkins.war Tomcat 로 시작, 리 눅 스 시스템 수정 catalina. sh, 환경 변수 설명 후 스 크 립 트 시작 전에 JAVAOPTS=”$JAVA_OPTS -Dhudson.util.ProcessTree.disable=true”;#Windows 시스템 에서 catalina. bat 를 수정 하고 환경 변수 에 대한 설명 을 한 후 스 크 립 트 시작 전에 set JAVA 를 추가 합 니 다.OPTS=%JAVA_OPTS% “-Dhudson.util.ProcessTree.disable=true”;Tomcat 의 설정 파일 을 수정 한 후 Tomcat 을 다시 시작 합 니 다. 대부분의 경우 이 기능 을 완전히 사용 하지 않 는 것 은 우리 가 원 하 는 결과 가 아 닐 수 있 습 니 다. 이 방법 은 작업 중 에 사용 하 는 것 을 권장 하지 않 습 니 다. 권장 하 는 방법 은 "방법 2"방법 2: Jenkins 의 환경 변 수 를 수정 하 는 BUILD 를 참고 하 십시오.ID, 그러면 Jenkins 는 시작 한 배경 프로 세 스 가 job 에서 만 들 어 졌 다 고 생각 하지 않 습 니 다.
       在execute shell或windows batch输入框的中执行期望job结束后继续运行的命令前加上如下代码(以启动tomcat为例):
    

    Linux: OLD_BUILD_ID= BUILDIDecho B U I L D I D e c h o OLD_BUILD_ID BUILD_ID = DONTKILLME//"DONTKILLME"는 가 독성 을 위해 쓴 것 입 니 다. startup. sh//실제 상황 에 따라 시작 명령 의 경 로 를 수정 할 수 있 습 니 다 BUILDID= OLDBUILDIDecho O L D B U I L D I D e c h o BUILD_ID
    Windows
       OLD_BUILD_ID=%BUILD_ID%
       echo %OLD_BUILD_ID%
       BUILD_ID=DONTKILLME
       startup.bat                          //根据实际情况修改启动命令的路径
       BUILD_ID=%OLD_BUILD_ID%
       echo %BUILD_ID%
    

    참고 자료https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller

    좋은 웹페이지 즐겨찾기