10장. systemd를 사용하여 서비스 관리
10.1. systemd 소개
systemd 는 Linux 운영 체제용 시스템 및 서비스 관리자입니다. 이는 SysV init 스크립트와 역호환되도록 설계되었으며 부팅 시 시스템 서비스의 병렬 시작, 필요에 따라 데몬 활성화 또는 종속성 기반 서비스 제어 논리와 같은 여러 기능을 제공합니다. Red Hat Enterprise Linux 7에서 systemd는 Upstart를 기본 init 시스템으로 대체합니다.
systemd에는 systemd 단위 의 개념이 도입되었습니다. 이러한 단위는 표 10.2. “systemd 장치 파일 위치” 에 나열된 디렉터리 중 하나에 있는 단위 구성 파일로 표현되며 시스템 서비스, 수신 대기 소켓 및 init 시스템과 관련된 기타 오브젝트에 대한 정보를 캡슐화합니다. 사용 가능한 systemd 장치 유형 전체 목록은 표 10.1. “사용 가능한 systemd 장치 유형” 을 참조하십시오.
단위 유형 | 파일 확장자 | 설명 |
---|---|---|
서비스 단위 |
| 시스템 서비스. |
대상 단위 |
| systemd 장치 그룹입니다. |
자동 마운트 단위 |
| 파일 시스템 자동 마운트 지점. |
장치 단위 |
| 커널에서 인식한 장치 파일입니다. |
마운트 단위 |
| 파일 시스템 마운트 지점. |
경로 단위 |
| 파일 시스템의 파일 또는 디렉터리. |
범위 단위 |
| 외부에서 생성된 프로세스. |
슬라이스 단위 |
| 시스템 프로세스를 관리하는 계층적으로 구성된 단위 그룹입니다. |
스냅샷 단위 |
| 저장된 systemd 관리자 상태입니다. |
소켓 단위 |
| 프로세스 간 통신 소켓입니다. |
스왑 장치 |
| 스왑 장치 또는 스왑 파일. |
타이머 장치 |
| systemd 타이머. |
디렉터리 | 설명 |
---|---|
| 설치된 RPM 패키지와 함께 배포되는 systemd 장치 파일입니다. |
| 런타임에 생성된 systemd 장치 파일입니다. 이 디렉터리는 설치된 서비스 장치 파일이 있는 디렉터리보다 우선합니다. |
|
|
system.conf를 사용하여 기본 systemd 구성 덮어쓰기
systemd의 기본 구성은 컴파일 중에 정의되고 /etc/systemd/system.conf
의 systemd 구성 파일에서 찾을 수 있습니다. 이러한 기본값에서 벗어나지 않도록 하려면 이 파일을 사용하여 systemd 단위에 대해 선택된 기본값을 전역적으로 덮어씁니다.
예를 들어 90초로 설정된 제한 시간 제한의 기본값을 재정의하려면 DefaultTimeoutStartSec
매개변수를 사용하여 필요한 값을 초 단위로 입력합니다.
DefaultTimeoutStartSec=required value
자세한 내용은 예 10.21. “제한 시간 제한 변경” 참조하십시오.
10.1.1. 주요 기능
Red Hat Enterprise Linux 7에서 systemd 시스템 및 서비스 관리자는 다음과 같은 주요 기능을 제공합니다.
소켓 기반 활성화 - 부팅 시 systemd는 이러한 유형의 활성화를 지원하는 모든 시스템 서비스에 대해 수신 대기 소켓을 생성하고 시작된 즉시 소켓을 이러한 서비스에 전달합니다. 이를 통해 systemd는 병렬로 서비스를 시작할 수 있을 뿐만 아니라 서비스를 시작할 수 있을 뿐만 아니라 사용할 수 없는 동안 전송된 메시지를 손실하지 않고도 서비스를 다시 시작할 수 있습니다. 해당 소켓은 액세스 가능하며 모든 메시지가 큐에 추가됩니다.
systemd는 소켓 기반 활성화에 소켓 유닛 을 사용합니다.
- 버스 기반 활성화 - 프로세스 간 통신에 D-Bus를 사용하는 시스템 서비스는 클라이언트 애플리케이션이 해당 애플리케이션과 통신을 시도할 때 처음으로 요청 시 시작할 수 있습니다. systemd는 버스 기반 활성화를 위해 D-Bus 서비스 파일을 사용합니다.
- 장치 기반 활성화 - 특정 유형의 하드웨어가 연결되거나 사용 가능하게 되면 장치 기반 활성화를 지원하는 시스템 서비스를 필요에 따라 시작할 수 있습니다. systemd는 장치 기반 활성화를 위해 장치 장치를 사용합니다.
- 경로 기반 활성화 - 특정 파일 또는 디렉터리가 해당 상태를 변경할 때 경로 기반 활성화를 지원하는 시스템 서비스를 요청 시 시작할 수 있습니다. systemd는 경로 기반 활성화에 경로 유닛 을 사용합니다.
- 마운트 및 자동 마운트 지점 관리 - Systemd 모니터 및 마운트 및 자동 마운트를 관리합니다. systemd는 마운트 지점에 마운트 장치를 사용하고 자동 마운트 지점에 자동 마운트 장치를 사용합니다.
- 공격적 병렬화 - 소켓 기반 활성화를 사용하기 때문에 systemd는 모든 청취 소켓이 제자리에 있는 즉시 시스템 서비스를 병렬로 시작할 수 있습니다. 온 디맨드 활성화를 지원하는 시스템 서비스와 함께 병렬 활성화는 시스템 부팅에 필요한 시간을 크게 줄입니다.
- 트랜잭션 단위 활성화 논리 - 단위를 활성화 또는 비활성화하기 전에 systemd는 종속성을 계산하고, 임시 트랜잭션을 생성하며, 이 트랜잭션이 일관되게 적용되는지 확인합니다. 트랜잭션이 일관성이 없는 경우 systemd는 오류를 보고하기 전에 자동으로 해당 트랜잭션을 수정하고 필수가 아닌 작업을 제거합니다.
- SysV init과 이전 버전과의 호환성 - Systemd는 Linux 표준 기본 코어 사양에 설명된 대로 SysV init 스크립트를 지원하므로 systemd 서비스 유닛으로의 업그레이드 경로가 쉬워집니다.
10.1.2. 호환성 변경
systemd 시스템 및 서비스 관리자는 SysV init 및 Upstart와 대부분 호환되도록 설계되었습니다. 다음은 Red Hat Enterprise Linux 시스템의 이전 주요 릴리스와 관련하여 가장 주목할 만한 호환성 변경 사항입니다.
systemd는 실행 수준을 제한적으로 지원합니다. 이러한 실행 수준으로 직접 매핑할 수 있는 여러 대상 장치를 제공합니다. 호환성을 위해 이전
실행 수준
명령도 함께 배포됩니다. 그러나 모든 systemd 대상을 실행 수준 수준에 직접 매핑할 수 있는 것은 아니며, 결과적으로 이 명령은N
을 반환하여 알 수 없는 실행 수준을 나타낼 수 있습니다. 가능하면level 명령을 사용하지 않는 것이 좋습니다.systemd 대상 및 실행 수준 수준 비교에 대한 자세한 내용은 10.3절. “systemd 대상 작업” 을 참조하십시오.
systemctl
유틸리티는 사용자 지정 명령을 지원하지 않습니다.start
,stop
및status
와 같은 표준 명령 외에도 SysV init 스크립트 작성자는 추가 기능을 제공하기 위해 다수의 임의 명령에 대한 지원을 구현할 수 있었습니다. 예를 들어 Red Hat Enterprise Linux 6에서iptables
에 대한 init 스크립트를panic
명령으로 실행할 수 있으므로 패닉 모드를 즉시 활성화하고 시스템을 재구성하여 들어오는 모든 패킷을 삭제할 수 있습니다. systemd에서 지원되지 않으며systemctl
은 문서화된 명령만 허용합니다.systemctl
유틸리티 및 이전서비스
유틸리티와의 비교에 대한 자세한 내용은 10.2절. “시스템 서비스 관리” 을 참조하십시오.-
systemctl
유틸리티는 systemd에서 시작하지 않은 서비스와 통신하지 않습니다. systemd는 시스템 서비스를 시작할 때 기본 프로세스의 ID를 저장하여 해당 서비스를 추적합니다. 그런 다음systemctl
유틸리티는 이 PID를 사용하여 서비스를 쿼리하고 관리합니다. 결과적으로 사용자가 명령줄에서 직접 특정 데몬을 시작하면systemctl
은 현재 상태를 확인하거나 중지할 수 없습니다. -
systemd는 실행 중인 서비스만 중지합니다. 이전 버전에서는 종료 시퀀스가 시작될 때 Red Hat Enterprise Linux 6 및 시스템의 이전 릴리스에서는
/etc/rc0.d/
디렉터리에 있는 심볼릭 링크를 사용하여 상태와 관계없이 사용 가능한 모든 시스템 서비스를 중지했습니다. systemd에서는 실행 중인 서비스만 종료 시 중지됩니다. -
시스템 서비스는 표준 입력 스트림에서 읽을 수 없습니다. systemd가 서비스를 시작할 때 표준 입력을
/dev/null
에 연결하여 사용자와의 상호 작용을 방지합니다. -
시스템 서비스는 호출된 사용자 및 해당 세션에서 어떠한 컨텍스트(예:
HOME
및PATH
환경 변수)를 상속하지 않습니다. 각 서비스는 명확한 실행 컨텍스트에서 실행됩니다. - SysV init 스크립트를 로드할 때 systemd는 Linux 표준 기본(LSB) 헤더로 인코딩된 종속성 정보를 읽고 런타임에 해석합니다.
- 서비스 유닛에 대한 모든 작업에는 기본 시간 초과가 5분으로 되어 시스템이 중단되는 것을 방지할 수 있습니다. 이 값은 initscripts에서 생성된 서비스에 하드 코딩되며 변경할 수 없습니다. 그러나 개별 구성 파일을 사용하여 서비스당 시간 초과 값을 지정할 수 있습니다. 예 10.21. “제한 시간 제한 변경”
systemd와 함께 도입된 호환성 변경 사항의 자세한 목록은 Red Hat Enterprise Linux 7 마이그레이션 플래닝 가이드 를 참조하십시오.