jenkins 빌드 시 종료가 되지 않고 계속 돌아가는 현상이 발생해서 확인한 내용을 정리해본다.
jenkins 프로젝트 설정에는 아래와 같이 Post build task(빌드 후 실행)에 jenkins 빌드가 성공하였을 경우(BUILD SUCCESS 문자열이 생김) 특정 shell 파일을 실행하게 설정해두었다.
shell 파일에서는 nohup으로 jar 파일을 백그라운드로 실행하고 있었다.
nohup java -jar /home/test/testApi.jar &
jenkins 빌드가 종료 되지 않는 이유는 SSH를 통해 스크립트를 수행시, 표준출력이 닫히거나 timeout이 발생할때까지 스크립트가 계속 열려있다고 한다.
그래서 script로 백그라운드 작업을 실행할 경우 모든 출력을 리다이렉트 해줘야 스크립트가 바로 종료 된다고 한다.
nohup java -jar /home/test/testAPI.jar > /home/test/log/testAPI.log 2>&1 &
그래서 위와 같이 testAPI.log 파일로 표준출력과 표준에러를 리다이렉션 시키게 수정하였다.
해당 스크립트의 의미는 java 명령어를 실행한 표준출력을 > 명령어를 통해 testAPI.log 파일로 리다이렉션 시키고 표준에러(2)도 표준출력(1)으로 리다이렉션 시키는 의미이다.
1. nohup
현재 세션이 종료 되어도 실행시킨 프로그램이 계속 실행되게 하기 위해서 사용하는 명령어
nohup으로 돌린 프로세스는 데몬 형태로 실행되어서 세션이 종료되어도 종료되지 않고 계속 실행됨
2. &
백그라운드에서 실행하기 위해서 사용하는 명령어로 명령어 제일 끝에 사용함
백그라운드 실행은 사용자의 눈에 보이지 않게 실행되는 것
3. 표준입출력 리다이렉션
표준입력 : 쉘에서 키보드로 명령을 입력받는것
표준출력 : 키보드로 입력받은 명령을 모니터로 출력하는것
표준입출력 리다이렉션 : 입력을 키보드로 받지 않고 파일로 받거나 출력을 모니터로 하지 않고 특정 파일로 하기 위해 사용
● 리다이렉션 명령어
명령어 | 의미 | 비고 |
> | 표준출력 | 명령 > 파일 : 명령의 결과를 파일로 저장 |
>> | 표준출력(추가) | 명령 >> 파일 : 명령의 결과를 기존 파일에 저장(파일 마지막에 결과 추가) |
< | 표준입력 | 명령 < 파일 : 파일의 데이터를 명령에 입력 |
● 파일디스크립터
표준입출력, 표준에러를 쉘이나 시스템 프로그래밍에서 숫자로 표현한 것
파일 디스크립터 | 구분 | 장치 |
0 | 표준입력 | 키보드 |
1 | 표준출력 | 모니터 |
2 | 표준에러 | 모니터 |
참고자료
'개발 > 리눅스' 카테고리의 다른 글
[CentOS7] [Spring Boot] [WebSocket] WebSocket Server 연결안되는 현상 (0) | 2024.06.13 |
---|---|
[리눅스] service 등록 방법 (0) | 2024.04.03 |
[Ubuntu] Openjdk 21 설치방법(java version upgrade) (0) | 2023.12.05 |
sh bash 차이점 (0) | 2022.12.14 |
shell script - if문 (0) | 2022.12.14 |