서버에 톰캣, 스프링부트, 배치 프로그램 등을 올리다 보면 부팅 시 자동 실행, 권한 관리, 서비스 상태 관리가 꼭 필요해진다. 이럴 때 사용하는 게 바로 systemd 서비스 등록이다.
이 글에서는 실무에서 가장 많이 쓰는 방식인
visudo를 이용한 sudo 권한 설정/etc/systemd/system/ 경로에 서비스 파일 생성을 처음부터 끝까지 정리해본다.
단순히 쉘에서 ./start.sh로 실행하면 이런 문제가 생긴다.
systemd로 등록하면:
systemctl start|stop|restart로 관리 가능enable)journalctl로 한 번에 확인👉 운영 서버라면 거의 필수다.
보통 root로 서비스 실행은 권장하지 않는다. 예를 들어 service_user 유저로 실행한다고 가정해보자.
id service_user
없다면 생성:
sudo adduser service_user
서비스 내부 스크립트에서 sudo가 필요하거나, 특정 명령만 sudo 없이 실행하고 싶을 때 visudo를 사용한다.
sudo visudo
service_user ALL=(ALL) NOPASSWD: /bin/systemctl
👉 의미:
service_user 유저는systemctl 명령을 실행 가능💡 보안상 필요 최소한의 명령만 허용하는 게 좋다.
이제 핵심 단계다.
sudo vi /etc/systemd/system/tomcat-example-service.service
[Unit]
Description=Tomcat example 2026 Service
After=network.target
[Service]
Type=forking
User=service_user
Group=dev
UMask=0002
Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
Environment=CATALINA_HOME=/opt/tomcat/share/tomcat10/example-service
Environment=CATALINA_BASE=/opt/tomcat/share/tomcat10/example-service
ExecStart=/opt/tomcat/share/tomcat10/example-service/bin/startup.sh
ExecStop=/opt/tomcat/share/tomcat10/example-service/bin/shutdown.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
서비스 파일을 만들거나 수정했으면 반드시 daemon-reload를 해야 한다.
sudo systemctl daemon-reload
sudo systemctl start tomcat-example-service.service
sudo systemctl restart tomcat-example-service.service
sudo systemctl stop tomcat-example-service.service
sudo systemctl enable tomcat-example-service.service
systemctl status tomcat-example-service.service
서비스가 안 뜰 때 가장 먼저 볼 것.
journalctl -xeu tomcat-example-service.service
실시간 로그:
journalctl -fu tomcat-example-service.service