터미널의 세션 연결이 끊어져도 프로세스가 계속 동작하도록 만들기위해 주로 nohup
을 사용해왔습니다. 하지만 nohup
을 사용하면서 불편한 점이 있었고, 다른 방법으로도 설정해보고 싶었기 때문에 systemd
를 이용하여 배포해보려 합니다.
# 업데이트
sudo apt-get update && sudo apt-get upgrade
# 설치
sudo apt-get install openjdk-11-jdk
# 환경변수 설정
vim ~/.bashrc
# ~/.bashrc 내부에 아래 두 줄 쓰기
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
export PATH=$PATH:$JAVA_HOME/bin
# 저장
source ~/.bashrc
# 확인
echo $JAVA_HOME
: Linux kernel API로 설계된 system demon
systemd는 시스템을 부팅하는 동안 데몬 스크립트를 병렬로 수행할 수 있다.
따라서 서비스간의 종속성 및 실행 순서 관리가 매우 중요하다.
💡 nohup이나 screen의 경우,
돌리고 있는 프로세스가 실패되면 다운되어 별도의 처리가 필요합니다.
그로인해 번거로운 다른 문제들이 발생할 수 있어 systemd를 사용하여 설정하고자 합니다.
~/.config/systemd/user/
/usr/lib/systemd/system
상세 내용(옵션)
Description=Mongo Log Service
After=syslog.target
User=sieun
ExecStart=/usr/bin/java -jar /var/www/mongo-log/mongo-log-0.0.1-SNAPSHOT.jar
/usr/bin/java
경로에 있는 jdk와 실행 명령어로 jar파일 구동 (다중 명령어도 지원)SuccessExitStatus=143
Restart=on-failure
WantedBy=multi-user.target
systemctl enable
로 등록할 때 등록에 필요한 Unit을 지정. # User 데몬을 reload
systemctl daemon-reload
# system 부팅 시 service가 자동으로 시작되도록 지정
systemctl enable mongo-log.service
# service 실행
systemctl start mongo-log.service
# service 상태 확인
systemctl status mongo-log.service
지금까지 명령어 앞에 nohup
만 추가하는 식으로 설정했다가, 이번 기회로 systemd
를 사용해보니 새로웠습니다. 여러 옵션들로도 설정해보면서 어떤 기능들이 있는지 살펴보는 계기가 되어 좋았습니다.
https://fmd1225.tistory.com/93
https://www.freedesktop.org/software/systemd/man/systemd.service.html