systemd설정 및 배포

sieun·2022년 7월 24일
1
post-thumbnail

개요

터미널의 세션 연결이 끊어져도 프로세스가 계속 동작하도록 만들기위해 주로 nohup을 사용해왔습니다. 하지만 nohup을 사용하면서 불편한 점이 있었고, 다른 방법으로도 설정해보고 싶었기 때문에 systemd를 이용하여 배포해보려 합니다.



Jdk 설치

# 업데이트
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



프로세스를 실행한 터미널의 세션 연결이 끊어져도 지속적으로 동작하도록 설정

Systemd

: Linux kernel API로 설계된 system demon

systemd는 시스템을 부팅하는 동안 데몬 스크립트를 병렬로 수행할 수 있다.
따라서 서비스간의 종속성 및 실행 순서 관리가 매우 중요하다.

💡 nohup이나 screen의 경우,
돌리고 있는 프로세스가 실패되면 다운되어 별도의 처리가 필요합니다.
그로인해 번거로운 다른 문제들이 발생할 수 있어 systemd를 사용하여 설정하고자 합니다.



unit file 생성

  • 경로
    • User service의 경우, ~/.config/systemd/user/
    • System service의 경우, /usr/lib/systemd/system

  • 상세 내용(옵션)

    • Description=Mongo Log Service
      • 해당 Unit에 대한 상세한 설명
    • After=syslog.target
      • Unit이 시작된 이후 나열된 유닛이 실행된다.
    • User=sieun
      • Unit의 프로세스를 수행할 사용자 명 지정
    • 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
      • Unit이 죽거나 응답이 일정 시간동안 없는 경우 재시작.
      • on-failure: 정상적으로 종료된 경우만 제외하고 모두 재시작.
    • WantedBy=multi-user.target
      • Unit을 등록하기 위한 종속성 검사 단계. systemctl enable 로 등록할 때 등록에 필요한 Unit을 지정.
      • multi-user.target : 사용자가 일반적으로 여러 콘솔이나 네트워크를 통해 로그인 가능.



실행 및 상태확인

	# 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를 사용해보니 새로웠습니다. 여러 옵션들로도 설정해보면서 어떤 기능들이 있는지 살펴보는 계기가 되어 좋았습니다.



Reference 📕

https://fmd1225.tistory.com/93

https://docs.spring.io/spring-boot/docs/current/reference/html/deployment.html#deployment.installing.nix-services.script-customization

https://www.freedesktop.org/software/systemd/man/systemd.service.html

https://prod.velog.io/@dong5854/파이썬-프로그램-Systemd로-관리하기

profile
열심히 공부중입니다😇

0개의 댓글