본문 바로가기
카테고리 없음

[Linux] systemd(system daemon)관리 (+tomcat 서비스 등록)

by 떵해이 2020. 11. 4.
300x250

○ service 관리란?

서비스 관리는 시작, 중지 등 을 할 수 있습니다.

서버가 실행되면 자동으로 실행할 수 있게 설정 할 수 있습니다.

그런 관리를 하기 위해서 등록을 해야합니다.

 

 

○ systemctl 서비스 등록

서비스를 등록하기 위해서 관련된 명령어를 숙지해야 합니다.

 

CentOS 6까지는 /etc/rc.d/init.d 에 서비스 관련 파일들이 존재하고, service 명령어를 통해 제어했다고 합니다.

(필자도 CentOS 7 부터 공부를 시작해서 잘모름)

 

CentOS 7부터는 서비스들이 대부분 Unit으로 분리되어있습니다.

이 Unit들은 서비스명.service 라는 파일명을 가지고 있고, systemctl명령어로 제어 가능합니다.

systemd의 설정파일들은 /etc/systemd 에 있습니다.

systemd 관련된 바이너리 실행파일 : /usr/lib/systemd 에 있습니다.

systemd 서비스, 타켓 파일 : /usr/lib/systemd/system 에 있습니다.

 

 

서비스 등록하는 방법

 

① service 파일 생성

   /usr/lib/systemd/system 안에 서비스명.service 파일을 만들면 systemctl 명령어로 서비스를 제어할 수 있습니다.

 

 

② service 파일 작성

   service 파일 안에는 3가지로 분류해서 작성합니다. (Unit, Service, Install)

 

예시로 tomcat 서비스 등록을 한번 해보도록 하겠습니다.

(참고로 저는 하는 법을 소개하기 위해 권한들을 무시하고 루트계정으로 전부 설정하였습니다.

 본래는 권한 때문에 에러도 생기는 경우가 많으니 권한 공부 하신뒤에 다른 계정으로 설정 해보시길 바랍니다.)

 

# vi /usr/lib/systemd/system/tomcat.service

명령어로 /usr/lib/systemd/system/안에 서비스명.service로 파일을 만들어줍니다.

 

 

빈 파일에 Unit, Service, Install 목록을 작성해줍니다. 작성하는 방법은 밑에서 소개하도록 하겠습니다.

작성 후 # :wq 로 저장 후 나옵니다.

표시한 경로는 본인이 설치한 톰캣 경로를 써주시면 됩니다.

 

 

# systemctl daemon-reload 명령어로 설정 적용 뒤

# systemctl enable tomcat.service 명령어로 링크를 만들어줍니다.

 

 

이제 언제 어디서나 # systemctl start tomcat.service 로 톰캣 서비스를 시작할 수 있습니다.

 

 

③ 서비스와 관련된 로그 journalctl을 사용하여 로그를 볼 수 있습니다.

# journalctl -u [서비스명] : 어떤 이유로 서비스가 작동되지 않을 때 원인을 찾을 수 있습니다.

 

 

○ 서비스 설정 목록

서비스 파일을 작성하기 위한 내용에 대해 인터넷에 찾아보시면 자세히 나와있습니다.

여기서는 간단하게 위에서 쓴 것과 자주 사용하는 것(주관적)으로 살펴보겠습니다.

 

[Unit]

▷ Description= 유닛에 대해 설명

 

▷ Before=, After= 유닛 시작의 전후 관계를 설정한다. 이 설정은 Requires 라는 설정과 독립적이란것을 알아야한다.

                        나열된 유닛이 Before= 는 시작되기 전 실행, After= 는 시작된 후 실행한다.

                        시스템 종료 시에는 반대 순서로 동작합니다.

 

[Service]

▷ Type= 서비스 유닛 타입을 설정합니다.

            종류 simple, forking, oneshot, notify, dbus 가 있습니다. 대표적인 simple, forking만 다루겠습니다.

 

            simple 은 기본값으로, 유닛이 시작된 경우 즉시 systemd는 유닛이 시작이 완료됐다고 판단한다.

                     그래서 다른 유닛과 통신하기 위해 소켓을 사용하는 경우는 이 설정이 부적합하다.

 

            forking 은 자식 프로세스 생성이 완료되는 단계까지를 systemd가 시작이 완료되었다고 판단한다.

                     자식 프로세스까지 systemd데몬이 관리하며, 부모 프로세스 확인을 위해 PID파일이 설정되어야 합니다.

 

▷ User= 유닛의 프로세스를 사용할 사용자

 

▷ Group= 유닛의 프로세스를 사용할 그룹

 

▷ ExecStart= 실행할 바이너리, 실행 명령어는 반드시 절대 경로 or 변수로 시작해야한다. (다중 명령어도 지원)

 

▷ ExecStop= 중지할 바이널리, 사용법은 ExecStart와 동일하다.

 

▷ Enviroment= 해당 유닛에서 사용할 환경 변수를 선언한다. 반드시 Exec*= 옵션보다 상단에 위치해야 한다.

 

▷ UMask= umask값을 선언, 설정이 없으면 기본 값은 0022

 

▷ Restart= 유닛이 장애 등으로 응답이 없을 경우 설정값대로 동작합니다. 기본값은 no입니다.

                always로 설정할 경우 무조건 재시작합니다.

 

[Install]

 

▷ WantedBy= systemctl enable로 유닛 활성화 등록할 때 등록에 필요한 유닛을 지정

                    multi-user.target은 다중 사용자 모드를 의미합니다.

 

반응형

댓글