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.sh와 Type=forking을 쓰려면 CATALINA_PID와 PIDFile까지 정확히 맞춰야 하며, PID가 오래 남는 경우를 별도로 처리해야 한다. 새 구성은 systemd-analyze verify releaseportal.service로 문법을 검사하고 journalctl -u releaseportal에서 종료와 재시작이 예상대로 기록되는지 staging에서 확인한다.
이것은 출발점이지 보안 완성본이 아니다. 배포판과 Tomcat 실행 방식에 따라 Type=simple과 catalina.sh run을 선호할 수 있다. unit을 바꾼 뒤 systemctl daemon-reload, systemctl cat, systemctl show로 실제 적용값을 본다. JVM heap과 GC 옵션은 setenv.sh와 unit에 중복 선언하지 않는다.