반응형
systemd 란?
systemd(system daemon)은 Unix 시스템이 부팅후에 가장 먼저 생성된 후에 다른 프로세스를 실행하는 init 역할을 대체하는 데몬입니다. Red Hat 에서 주도적으로 개발을 시작했고 지금은 RHEL/CentOS 와 Ubuntu 나 Arch 등 대부분의 리눅스 시스템에 공식적으로 채택되었습니다.
systemd(system daemon)는 1번 프로세스 ID를 갖고 있으며 부팅부터 서비스관리 로그관리 등을 담당합니다. 또한 부팅시에 병렬로 실행되어서 부팅속도가 빠릅니다. 오래전에 사용하던 init방식은 부팅 과정에서 단계적으로 run-level을 올려가며 해당 run-level에 포함된 스크립트들을 순차적으로 실행시키니 설정이 복잡했으며 속도마저 느렸었습니다.
부팅시 필요한 작업을 systemd unit으로 등록하여 사용할 수 있으며 unit 파일 생성 방법은 아래와 같습니다.
systemd unit 위치와 파일명
### systemd unit 파일 경로
ls -al /etc/systemd/system
### systemd unit 파일 예시
cat /etc/systemd/system/example.service
systemd 파일의 섹션
- Unit
- Service
- Install
- Socket
- Mount
- Automount
- Swap
- Path
- Timer
- Slice
주요 섹션 설명
Unit 섹션
- Description : 서비스 설명
- After : 본 서비스 이전에 시작할 서비스
- Before : 본 서비스 이후에 시작할 서비스
- Requires : 본 서비스와 의존관계의 서비스로 반드시 실행되어야 본서비스가 실행
- Wants : Requires보다 약한 의존관계로 설령 서비스가 실행되지 않더라도 본서비스가 실행됨
Service 섹션
- Type : Type 에는 simple, forking, oneshot, dbus, notify, idle 중에 1개를 입력
- simple : deafult값. 유닛이 시작된 경우 즉시 systemd는 유닛의 시작이 완료 되었다고 판단함. 다른 유닛과 통신하기 위해 소켓을 사용하는 경우 이 설정을 하면안됌
- forking : 자식 프로세스가 생성완료 되는 단계까지를 systemd가 시작완료 되었다고 판단하며 부모 프로세스를 추적할 수 있도록 PIDFile 필드에 PID파일을 선언해주어야함
- oneshot : 메인 프로세스가 시작되면 상태를 activating 으로 바꾸고 끝날때까지 기다리며 해당 메인 프로세스가 끝나야지만 다음 systemd unit으로 넘어간다. 또한 해당 실행이 종료되더라도 RemainAfterExit=yes 옵션을 통해 유닛이 활성화 상태로 간주할 수 있다.
- dbus : simple과 유사, DBUS에 지정된 BusName이 준비될 때까지 대기하며 DBUS 준비가 완료된 이후에 프로세스 시작
- notify : simple과 유사, systemd에 시그널을 보내고 시그널에 대한 내용은 libsystemd-daemon.so 에 선언 되어있음
- idle : simple과 유사, 모든 서비스가 실행된 후에 실행됨
- EnvironmentFile : 서비스의 환경설정을 파일을 지정
- ExecStartPre : 서비스 시작하기 전에 실행할 명령을 설정
- ExecStart : 서비스를 시작하기 위한 full path 및 실행 인자를 설정
- ExecStartPost : 서비스를 시작한 이후에 실행할 명령을 설정
- ExecStop : 서비스를 종료할 때 실행할 명령을 설정
- ExecStopPost : 서비스 종료 명령 이후에 실행할 명령을 설정
- ExecReload : 서비스가 reload 될때 필요한 명령어나 스크립트를 지정
- KillMode : 프로세스가 어떻게 중지 되는지 결정함
- Restart : on-failure는 어떤 문제로 인해 0이아닌 Exit코드를 보여주고 중지될 경우 서비스를 다시시작, 반대로 on-success는 프로세스가 아무런 문제없이 Exit코드가 0인 경우 다시 그 서비스를 시작하라는 의미
- RestartSec : 서비스를 다시 시작하기전에 이 시간동안 서비스를 Sleep상태로 두라는 의미
- RemainAfterExit : (yes|no) 유닛이 종료 이후에도 유닛이 활성화 상태로 판단함
- TimeoutSec : 서비스 종료시 대기하는 시간
Install 섹션
- 부팅 시에 Unit이 활성화나 비활성화를 위해 사용하는 명령어. 값이 default.target이면 링크 파일을 생성하지 않고 multi-user.target 이면 링크 파일을 생성함
systemd Unit 예시
[Unit]
Description=Systemd Test Daemon
After=after-example.service
Requires=after-example.service
[Service]
Type=simple
ExecStart=/usr/local/bin/example-daemon.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
반응형
'IT > Linux' 카테고리의 다른 글
[리눅스] 다중명령어 (더블엔퍼센트&&, 더블버티컬바||) (0) | 2022.02.16 |
---|---|
[리눅스] shell 행 출력을 배열로 전환하기 (0) | 2022.02.16 |
[Linux] cp 명령어 사용법 총정리 (0) | 2022.01.04 |
[Linux] grep 명령어 사용법 총정리 (0) | 2022.01.04 |
[리눅스] 압축 방법 차이 (tar, gz, zip, tar.gz, tar.bz2) (0) | 2021.12.26 |