Systemd를 이용한 Java 응용 프로그램 관리
Linux 서버 관리 영역에서 서비스 관리 도구의 발전은 응용 프로그램의 배포 및 운영을 크게 단순화시켰습니다. 전통적으로 Java 응용 프로그램은 쉘 스크립트를 통해 실행 및 관리되었는데, 이는 효과적이긴 했지만 가독성 및 복원력 측면에서 단점이 있었습니다. 이 블로그 글에서는 Linux 운영 시스템용 시스템 및 서비스 관리자인 systemd를 사용하여 Java 응용 프로그램을 더 효율적으로 등록, 실행 및 관리하기 위한 전환을 탐구합니다.
Systemd 로의 전환
Systemd는 시스템 프로세스를 관리하기 위한 강력한 프레임워크를 제공합니다. 쉘 스크립트와 달리, 실패 시 자동으로 다시 시작하도록 구성할 수 있어 응용 프로그램의 가용성과 신뢰성을 높일 수 있습니다.
Systemd 서비스 등록
서비스 파일은 /etc/systemd/system에 원하는 서비스 이름으로 생성할 수 있습니다. 예를 들어, domain.service 파일을 생성했습니다.
[Unit]
Description=Java Application Service
After=network.target
[Service]
Type=simple
User=username
Group=group
WorkingDirectory=/path/to/directory
ExecStart=/bin/bash -c 'java -Djava.net.preferIPv4Stack=true -jar /path/to/directory/*.jar --spring.profiles.active=dev'
ExecStop=/bin/kill -s TERM $MAINPID
Restart=always
RestartSec=30
TimeoutStartSec=30
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=domain
[Install]
WantedBy=multi-user.target
Systemd 서비스 실행
Systemd 서비스는 nginx와 같은 다른 서비스와 같은 방식으로 실행할 수 있습니다. 또한 서비스의 상태를 확인할 수 있습니다.
root@domain:/etc/systemd/system# systemctl reload domain.service
root@domain:/etc/systemd/system# systemctl status domain.service
Systemd 서비스 로그 확인
Systemd 서비스 로그를 확인하려면, 로그 설정을 설정해야 합니다.
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=domain
선택한 파일에 로그를 기록하려면 rsyslog를 구성할 수 있습니다. 매우 간단하며, /etc/rsyslog.d/domain.conf 파일을 생성하고 아래 코드를 입력한 다음, systemctl restart rsyslog 로 재시작할 수 있습니다.
if $programname == 'allso' then /var/log/app.allso.log
& stop
마무리
쉘 스크립트로 배포될 때, 가독성이 떨어지고 Java 응용 프로그램이 중단될 경우 실시간으로 처리해야 했습니다. 하지만 프로세스가 중단될 때 자동으로 재시작할 수 있는 장점이 있는 것으로 보입니다. 더 세부적인 옵션이 있으므로 관련 옵션에 대해 더 공부해야 할 것 같습니다. 그리고 Systemd 서비스에 대해 더 많이 공부할 필요가 있습니다.
'JAVA' 카테고리의 다른 글
| [JPA] could not initialize proxy - no Session (9) | 2025.01.09 |
|---|