WEBBOOK CHAPTER

WAR 배포, 밤에 깨지 않게: 8장 systemd가 프로세스의 정본이 되게 한다

8장 systemd가 프로세스의 정본이 되게 한다

터미널에서 startup.sh를 실행하고 창을 닫는 방식은 누가 어떤 환경으로 시작했는지 남기기 어렵다. systemd unit에 계정, 경로, JVM 옵션, 재시작 정책과 종료 시간을 명시한다.


[Unit]
Description=ReleasePortal Tomcat
After=network-online.target

[Service]
Type=simple
User=releaseportal
Group=releaseportal
Environment=CATALINA_HOME=/opt/tomcat/current
Environment=CATALINA_BASE=/srv/tomcat/releaseportal
EnvironmentFile=-/etc/releaseportal/runtime.env
ExecStart=/opt/tomcat/current/bin/catalina.sh run
ExecStop=/opt/tomcat/current/bin/shutdown.sh
TimeoutStopSec=45
Restart=on-failure
UMask=0027

[Install]
WantedBy=multi-user.target

catalina.sh run은 Tomcat을 foreground에 두므로 systemd가 실제 JVM 프로세스를 직접 추적한다. startup.shType=forking을 쓰려면 CATALINA_PIDPIDFile까지 정확히 맞춰야 하며, PID가 오래 남는 경우를 별도로 처리해야 한다. 새 구성은 systemd-analyze verify releaseportal.service로 문법을 검사하고 journalctl -u releaseportal에서 종료와 재시작이 예상대로 기록되는지 staging에서 확인한다.

이것은 출발점이지 보안 완성본이 아니다. 배포판과 Tomcat 실행 방식에 따라 Type=simplecatalina.sh run을 선호할 수 있다. unit을 바꾼 뒤 systemctl daemon-reload, systemctl cat, systemctl show로 실제 적용값을 본다. JVM heap과 GC 옵션은 setenv.sh와 unit에 중복 선언하지 않는다.