systemd 란?

systemd(system daemon)은 전통적으로 Unix 시스템이 부팅후에 가장 먼저 생성된 후에 다른 프로세스를 실행하는 init 역할을 대체하는 데몬입니다. Red Hat 에 근무하는 Lennart Poettering 이 주도적으로 개발을 시작했고 지금은 RHEL/CentOS 와 Ubuntu 나 Arch 등 대부분의 리눅스 시스템에 공식적으로 채택되었습니다.


다음과 같이 매우 복잡한 아키텍처를 갖고 있지만 일반 리눅스 사용자 입장에서는 최상단의 systemd utillities 인 systemctl, journalctl 등 유틸리티 사용법을 위주로 익히면 되며 이 문서에서는 systemctl 사용 방법에 대해서 설명합니다.

출처: https://en.wikipedia.org/wiki/Systemd#/media/File:Systemd_components.svg



Target 관리

linux systemctl 명령으로 부팅 타겟(booting target) 지정하기 참고

service/chckconfig 명령어와 비교

systemctl 과 service/chckconfig 명령어 비교표 참고


서비스 관리

서비스 상태 확인

status 명령어 뒤에 확인할 서비스 명을 주고 실행하면 됩니다.

systemctl status 서비스명
BASH


다음은 nginx 서비스의 상태를 출력합니다.

systemctl status nginx
BASH

서비스 구동

systemctl start mariadb
BASH


서비스 자동 시작

enable 로 설정하면 부팅시 자동 시작됩니다.

systemctl enable mariadb
CODE


서비스 목록 보기

list-units 명령어 사용

$ sudo systemctl list-units
BASH

설치된 모든 unit 파일을 보려면 list-unit-files  사용

$ sudo systemctl list-unit-files
BASH


서비스 마스킹

동일한 용도로 사용하는 서비스가 동시에 설치되어 있을 경우 제대로 동작하지 않고 충돌할 수 있습니다.

예로 ntpd 와 chronyd 는 동일한 용도이므로 2개가 동시에 설치되어 있을 경우 문제가 되므로 이럴때는 service masking 를 사용하면 서로 충돌하는 서비스를 실수로 시작하지 않게 됩니다.


예로 다음 명령어를 실행하면 실수로 ntpd 를 구동해도 ntpd 가 시작되지 않음.


$ sudo systemctl mask ntpd

Created symlink from /etc/systemd/system/ntpd.service to /dev/null
BASH


실수로 ntpd 를 실행하는 경우 아래와 같은 메시지가 출력됨.

$ sudo systemctl start ntpd

Failed to start ntpd.service: Unit is masked.
BASH


마스킹된 서비스를 해제하려면 systemctl unmask 명령어를 실행

$ sudo systemctl unmask ntpd

Removed symlink /etc/systemd/system/ntpd.service
BASH



조건에 따라 서비스 보기

enabled 된 모든 서비스

$ sudo systemctl list-units --state=enabled
BASH


구동에 실패한 서비스

$ sudo systemctl list-units --state=failed
BASH

모든 active 목록

$ sudo systemctl list-units --state=active
BASH

상태가 inactive 인  목록

$ sudo systemctl list-units --all --state=inactive
CODE


서비스중에 상태가 running 인 목록

$ sudo systemctl list-units --type=service --state=running
BASH


특정 서비스가 active 상태인지 조회

서비스가 현재 active 상태인지 조회할 경우 is-active 구문 사용

$ sudo systemctl is-active nginx


failed
BASH

서비스가 부팅때 구동되도록 설정 여부

서비스가 현재 active 상태인지 조회할 경우 is-eabled 구문 사용

$ sudo systemctl is-enabled nginx
disabled
BASH

journalctl

Linux journalctl 사용법 을 참고하세요.


참고