본문으로 바로가기

목차

    0. Why?

    0.1. systemctl(systemd)이란?

    - RHEL 7에 도입된 systemd(system daemon)를 관리하는 명령어

    - 서비스를 쉽고 편하게 제어할 수 있는 명령어(stop, status, start, auto start...)

    - systemd(system daemon)은 전통적으로 Unix 시스템이 부팅 후에 가장 먼저 생성된 후에 다른 프로세스를 실행하는 init 역할을 대체하는 데몬입니다. 

    0.2. 톰캣(Tomcat)을 왜 서비스에 등록하나요?

    - 톰캣을 실행하려면 직접 경로에 접근해서 sh 파일을 실행해 주게 되는데 이러한 비효율 및 불편함을 해결해 줄 수 있습니다.

    - 톰캣을 재부팅 시에도 자동으로 실행되도록 만들 수 있습니다. 

    - 톰캣의 간략한 상태를 쉽게 확인할 수 있습니다.

    0.3. 세팅 환경 

    - 필자는 CentOS 7(centos-release-7-9.2009.0.el7.centos.x86_64) 환경에서 설정했습니다.

     


    1. 서비스 등록하기

    1.1 tomcat.service 파일 생성

    /etc/systemd/system 또는 /usr/lib/systemd/system 경로에 vi(vim) 툴을 이용해 tomcat.service를 생성해줍니다.

    - /usr/lib/systemd/ vs /etc/systemd/system/

      → 기본적으로 배포 저장소에서 다운로드한 패키지로 제공되는 파일은 /usr/lib/systemd/ 

      → 시스템 관리자(사용자)가 수정한 사항은 로 이동합니다 /etc/systemd/system/

    # vi /etc/systemd/system/tomcat.service​

    1.2 tomcat.service 내용 저장

    - 아래의 내용을 사용자 경로에 맞게 잘 입력 후 저장해 줍니다.

      Environment=사용자의 톰캣 경로 

      ExecStart=사용자의 톰캣 경로/bin/startup.sh
      ExecStop=사용자의 톰캣 경로/bin/shutdown.sh

    [UNIT]
    Description=tomcat
    After=syslog.target network.target
    
    [Service]
    Type=forking
    
    Environment=/usr/local/lib/apache-tomcat-8.5.69
    ExecStart=/usr/local/lib/apache-tomcat-8.5.69/bin/startup.sh
    ExecStop=/usr/local/lib/apache-tomcat-8.5.69/bin/shutdown.sh
    
    User=root
    Group=root
    
    [Install]
    WantedBy=multi-user.target

     

     


    2. 명령어 사용

    2.1. 명령어 종류

    - 아래 명령어처럼 systemctl 명령어를 이용해 사용할 수 있습니다.

    서비스 실행
    # systemctl start 서비스명
    
    서비스 중지
    # systemctl stop 서비스명
    
    서비스 상태 확인
    # systemctl status 서비스명
    
    서버 재부팅시 서비스 자동 실행 등록
    # systemctl enable 서비스명
    
    서버 재부팅시 서비스 자동 실행 해제
    # systemctl disable 서비스명
    
    위의 서비스 설정을 바로 적용을 위한 명령어
    # systemctl daemon-reload
    
    서비스와 관련된 프로세스도 모두 죽임
    # systemctl kill 서비스명
    
    존재하는 전체 서비스 목록
    # systemctl
    
    서비스 목록 (부팅 시 자동 실행 활성화 여부만 표시) 
    # systemctl list-unit-files 
    
    부팅시 실행에 실패한 서비스목록
    # systemctl --failed
    
    서비스 활성화 여부
    # systemctl is-enabled 서비스명
    
    서비스 현재 동작 여부
    # systemctl is-active 서비스명
    
    서비스의 자세한 상태 (해당 서비스의 로그도 표시)
    # systemctl status -l 서비스명

     

    - 사용 예시

    # systemctl start tomcat
    # systemctl status tomcat
    ● tomcat.service
       Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: disabled)
       Active: active (running) since 일 2021-08-01 17:09:50 KST; 5s ago
    ... 
    
    # systemctl stop tomcat
    # systemctl status tomcat
    ● tomcat.service
       Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: disabled)
       Active: failed (Result: exit-code) since 일 2021-08-01 17:10:01 KST; 3s ago
    ...
    
    # systemctl enable tomcat
    Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /etc/systemd/system/tomcat.service.
    
    # systemctl disable tomcat
    Removed symlink /etc/systemd/system/multi-user.target.wants/tomcat.service.

    2.2. 로그 확인

    - 서비스로 등록한 경우 journalctl를 이용해 서비스와 관련된 로그를 살펴볼 수 있습니다. 설정이 잘못됐거나, 서비스를 시작할 수 없을 때 journalctl 명령어로 원인을 파악할 수 있습니다.

    journalctl -u 서비스이름
    
    # journalctl -u tomcat