티스토리 뷰
정확히는 리눅스에서 프로세스를 실행하는 과정에서 발생하는 문제다.
만약 AWS EC2에서 서버 배포 시, 포어그라운드(foreground)에서 Spring boot로 구현한 jar를 실행시켜버리면 해당 서버에서 아무것도 할 수 없게 된다.
그리고, 로그인된 서버 세션이 끊어지게되면, 해당 프로세스도 종료되게 된다. 이런 문제를 해결하기 위해서 리눅스에서는 백그라운드에서 프로세스를 실행시킬 수 있게 해놨다.
1. 프로세스 백그라운드 실행 명령어
nohup
명령어를 쓰면 된다.
nohup 명령어
는 접속된 서버의 세션이 끊어져도 그 프로세스가 계속 유지되도록 하는 명령어인데, 여기서 프로세스가 백그라운드에서 게속 떠있게끔하는 설정이 있다.
nohup java -jar demo-0.0.1-SNAPSHOT.war &
명령어 끝에 & 를 넣으면, 프로세스를 백그라운드에서 띄워주는 옵션을 사용하게 된다.
여기서, nohup으로 실행한 프로세스의 로그는 별도의 위치를 지정해주지 않으면 /home/ubuntu/nohup.out
에 저장된다.
nohup.out 파일
을 생성하지 않으려면 표준 출력과 표준에러를 /dev/null
로 지정 해주면 된다.
nohup [프로세스] 1>/dev/null 2>&1 &
1>/dev/null 은 표준 출력을 사용하지 않겠다는 의미이고, 2>&1 은 표준 에러를 표준 출력과 같게 만드는 명령어이다.
2. 백그라운드 프로세스 종료 명령어
프로세스가 백그라운드에 떠 있기 때문에 일반적인 종료 방법으로는 종료할 수 없다.
1. ps -ef로 프로세스의 pid(process id)를 알아낸다.
ps -ef | grep [프로세스명]
2. pid를 알아낸 후
# 프로세스 정상 종료
kill -15 [pid]
# 프로세스 강제 종료
kill -9 [pid]
kill은 프로세스를 종료하는 명령어이다.
-15 옵션은 하던 작업을 모두 안전하게 종료하는 절차를 밟고, 메모리상에 있는 데이터와 각종 설정/환경 파일을 안전하게 저장한 후 프로세스를 종료한다.
그러나 -9 옵션은 프로세스를 강제 종료 작업중인 모든 데이터를 저장하지 않고 프로세스를 종료하기 때문에 저장되지 않은 데이터는 소멸되느 권장되지 않는 종료 방법이다.
다만, 정상적으로 종료되지 않을 때는 -9 옵션을 써서라도 종료를 해야 재시작이 가능하다.
'개발 > AWS' 카테고리의 다른 글
스프링부트에서 AWS SQS SDK 2.0 사용하기 (0) | 2023.08.07 |
---|---|
Windows에서 AWS 인증키 생성하고 저장하기 (0) | 2023.08.07 |
스프링부트에서 AWS S3 SDK 2.x 버전 사용하기 (0) | 2023.06.17 |
스프링부트에서 AWS S3 의존성을 Spring cloud starter로 설정했을 때 생기는 문제 (0) | 2023.06.07 |
AWS S3란? 스프링 부트에서 S3에 업로드하기 (0) | 2023.06.06 |
- Total
- Today
- Yesterday
- elasticsearch
- EKS
- AWS
- AOP
- java
- terraform
- MySQL
- ChatGPT
- 스프링부트
- 람다
- openAI API
- GIT
- 티스토리챌린지
- docker
- S3
- Spring
- 후쿠오카
- lambda
- Log
- Kotlin
- 오블완
- CloudFront
- springboot
- serverless
- cache
- JWT
- OpenFeign
- Elastic cloud
- AWS EC2
- OpenAI
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |