관리 메뉴

IT창고

systemctl(서비스관리) 본문

서버운영/Linux

systemctl(서비스관리)

방구석여포 2019. 7. 12. 00:10

systemctl 사용법 및 systemd 데몬에 대해 알아보겠습니다.

 

systemd는 CentOS 7버전부터 init시스템 대신 사용되며 Ubuntu에서도 systemd를 사용합니다 
systemd의 용도는 프로세스를 관리하고 유닛(Unit)으로 서비스를 제어하는 시스템 자원 통합 관리 도구입니다.

 

테스트를 진행할 리눅스는 CentOS 7.x로 진행하도록 하겠습니다.

 

CentOS 7.x의 프로세스를 보면 systemd 데몬이 동작하는걸 확인할수있습니다.


CentOS 6.x에서 사용하던 service명령어, chkconfig명령어를 주로 사용했다면 systemctl명령어를 사용하며 혼란스러웠을텐데 우선 systemctl의 사용방법 부터 확인해보겠습니다.

 

서비스 시작 systemctl start 서비스명  ex) systemctl start httpd
서비스 정지 systemctl stop 서비스명
서비스 구동 상태확인 systemctl status 서비스명
서비스 활성화 확인 systemctl is-enabled 서비스명
서비스 활성화 systemctl enable 서비스명
서비스 비활성화 systemctl disable 서비스명
모든 서비스 확인 systemctl list-units --type service --all
서비스(Unit)목록 확인 systemctl list-units

systemctl 명령어 중 자주 사용하는 명령어들이며 이외에 여러 명령어들이 있습니다.

service, chkconfig 명령어를 따로 사용하지 않고 systemctl명령어 하나로 사용하는 점을 확인할 수 있습니다.

 

 

런레벨 관리에 대해 알아보겠습니다.

CentOS 6.x버전에서도 run level이 있었으며 systemctl 명령어로 run level을 설정할 수 있습니다.

CentOS 7.x에서 사용되는 systemd 데몬에서는 target으로 변경되었습니다 숫자 런레벨과 타겟 런레벨을 아래의 표로 정리하였습니다.

Run Lever 설명 타겟 ( target) 유닛
0 (시스템종료) runlevel0.target , poweroff.target
1 (복구 모드) runlevel0.target ,rescue.target
3 ( 다중사용자 모드) runlevel0.target , multi-user.target
5 (GUI 모드) runlevel0.target , graphical.target
6 (Reboot) runlevel0.target , reboot.target

systemctl get-default 명령어로 현재 런 레벨을 확인할 수 있습니다. 또한 runlevel 명령어를 사용하면 현재 런 레벨을 확인할 수 있습니다. 

또한 심볼릭 링크로 default.target을 graphical.target으로 바꿔주는 방법도 있습니다. 

ex) ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target

 

여기까지 systemctl명령어의 사용법이였으며 테스트로 서비스를 등록해보도록 하겠습니다.
테스트는 Tomcat 서비스를 수동으로 설치하여 systemd 서비스에 등록해보도록 하겠습니다

 

tomcat 파일을 직접 다운받았습니다. systemd의 서비스 파일을 등록하도록 하겠습니다. 서비스 파일은 /etc/systemd/system/서비스명.service 으로 작성합니다.

/etc/systemd/system/testtomcat.service 파일에 위와 같이 작성하였습니다. 

systemd의 서비스등록은 위와 같은 서비스파일을 만들어 안에 작성하며 Unit, Service, Install 세션으로 나눠집니다. 

각 세션 마다 사용하는 옵션이 있으며 위의 사진에서 사용되는 옵션에 대해 알아보겠습니다.

 

[Unit] 옵션 

Description= 작성하는 유닛의 설명 및 용도나 내용을 작성합니다
Before= , After= 유닛 시작 시 전/후 유닛이 시작됩니다. Requires= 옵션을 같이 사용할 경우 이 옵션과 별개로 동작 합니다.
Requires= 이 옵션에 설정된 유닛(상위 유닛)이 정상 작동중일때 지금 작성중인 유닛이 작동됩니다.

[Service]

Type= 유닛의 타입을 설정합니다.  대표적으로 simple , forking 등이 있으며 simple은 기본값으로 유닛이 동작하며 forking의 경우 자식 프로세스까지 systemd데몬이 관리하며 부모프로세스 확인을 위해 PID 파일이 설정되어야 합니다.
Environment= 작성하는 유닛의 환경변수를 설정합니다.
ExecStart= 유닛이 동작될때 시작할 스크립트 파일을 설정합니다.
ExecStop= 유닛이 중지될때 동작될 스크립트 파일을 설정합니다.
User= , Group= 유닛이 실행될때 수행할 사용자와 그룹을 설정합니다. 서비스를 시작할 경우 해당 프로세스는 여기에 작성된 사용자와 그룹으로 동작하게 됩니다.
UMask= umask값을 설정합니다. 설정하지 않을 경우 0022 기본값으로 적용됩니다.
RestartSec= 유닛이 재시작될 경우 중지 후 다시 재시작되기까지 대기하는 시간을 설정합니다. 설정하지 않을 경우 100ms 입니다. 이 옵션을 사용할 경우 Restart=을 사용해야 적용됩니다.
Restart= 유닛이 장애 등으로 응답이 없을 경우 설정값대로 동작합니다. 기본값은 no이며 always의 경우 무조건 재시작 입니다. 
SyslogLevel= 로그 레벨을 설정합니다. 설정 가능한 로그레벨로 notice, info, crit, alert, emerg 등이 있습니다.

[Install]

WantedBy= 유닛 활성화 등록 시(systemctl enable 서비스명) 등록에 필요한 유닛을 지정합니다.
Alias= 유닛의 Alias를 지정합니다. Alias의 이름은 유닛타입(서비스.service) 확장자를 가지고 있어야만 합니다.

각 세션에 필요한 옵션에 대해 알아보았습니다. 

위의 옵션을 참고하여 서비스 파일을 작성하도록 합니다. 예시는 위의 서비스 파일 작성 내용입니다.

작성이 끝났다면 위와 같이 systemd 데몬을 재시작해주고 서비스 활성화 등록 후 서비스를 시작하면 됩니다.

만약 root 이외에 다른 일반계정으로 프로세스를 동작하도록 한다면 서비스파일 작성 전 권한작업을 해줘야하므로 주의합니다.

 

 

 

참고 사이트

https://www.freedesktop.org/wiki/Software/systemd/

'서버운영 > Linux' 카테고리의 다른 글

Linux - Solaris 11 설치  (1) 2019.09.15
CentOS 7 - 젠킨스(Jenkins) 설치  (1) 2019.08.25
Alpine Linux 설치 및 활용  (0) 2019.06.12
Linux Log  (0) 2019.03.30
CentOS7 - Firewall 설정  (0) 2019.02.20
Comments