반응형
1. systemd 란?
systemd(system daemon)는 예전의 Unix 시스템에서 사용되던 Init(SysV, Upstart 등) 의 단점들을 개선하여 새롭게 개발된 데몬
2. 기존 init과 systemd 의 동작 과정
2-1. init과 systemd의 공통점
- 리눅스의 커널 부팅이 완료된 이후, 실행되는 첫번째 프로세스
- 리눅스 커널이 직접 실행하는 유일한 프로세스이며, 이후 실행되는 모든 프로세스의 조상이 됨.
- 시스템의 여러 서비스들과 데몬들을 초기화 및 실행하는 역할을 수행
2-2. init의 동작 과정
- Init 시스템은 여러 서비스들과 데몬들을 실행하는데, 기존의 동작 과정은 Config를 사용하여, 서비스들을 실행한다
- Config 파일을 작성하여, 마운트
- 해당 Config에 작성된 순서대로 서비스 실행
2-3. Systemd 의 동작 과정
- 각 서비스들의 실행조건이 기록된 Service 파일의 Unit들의 집합들을 토대로 실행된다. 간단한 동작 순서는 아래의 그림 및 .service파일의 내용을 참고한다.
- [Unit], [Install] ...과 같이 하나의 service 파일에는 여러개의 섹션이 존재하는데 이의
예를 들어, xxx.service 파일내용은 아래와 같이 구성되어 있다.
[Unit]
Description="demo service"
After=second.target
Requires=first.service
[Install]
....
3. Systemd의 섹션들
- 주의사항
- service 파일에 작성된 각 섹션들은 대소문자를 꼭 구분하여, 맞게 사용해야 합니다.
- 여기에 작성된 표준 섹션외에 다른 비표준 섹션이 필요할 경우, 섹션이름에 X-를 추가하여, 정의할 수 있습니다.
3-1. [Unit] Section Directives
- Description
- Documentation
- Requires
- Wants
- BindTo
- Before
- After
- Confliects
- Condition
- Assert
3-2. [Install] Section Directives
- WantedBy
- RequireBy
- Alias
- Also
- DefaultInstance
3-3. [Service] Section Directives
- simple
- forking
- oneshot
- dbus
- notify
- idle
3-3-1. 특정 서비스 타입이 확정될 경우, 추가로 필요한 요소가 존재함
- RemainAfterexit
- PIDFile
- BusName
- NotifyAccess
3-4. 기타 Section (너무 많아서, 아래 4링크 참고)
- Socket, Mount, Automount, Swap, Path, Timer, Slice
4. systemd service 를 실행, 관리하기 위한 옵션들
- ExecStart
- 프로세스를 실행하기 위한 명령어 작성(전체경로 및 Argument가 필요하다면 작성, ex) /usr/local/bin/python3.7 /etc/...../test.py
- ExecStartPre
- 메인 프로세스가 실행되기 전에, 실행되어야 하는 프로그램이 있다면 작성합니다.
- 여러개의 항목을 작성할 수 있습니다.
- 명령어 실패를 허용하기 위해서는, 앞에 "-' 를 붙여 작성하면 됩니다.
- ExecStartPost
- ExecStartPre 와 반대로, 메인 프로세스가 실행된 이후에 추가로 실행되어야 하는 프로세스 명령어
- ExecReload
- 서비스가 Reload가 가능한 서비스일 경우, 필요한 추가 옵션
- ExecStop
- 서비스를 stop 하기 위해 필요한 명령어
- 해당 옵션이 제공되지 않을 경우, 서비스가 중지되면 프로세스가 바로 죽습니다(Killed)
- ExecStopPost
- stop 명령을 실행한 뒤에, 필요한 명령을 작성할 수 있습니다.
- RestartSec
- 서비스의 자동 재시작이 가능할 경우, 재시작까지의 Sec를 작성할 수 있습니다.
- Restart
- 서비스가 재시작 하는 경우, 유형들을 작성 할 수 있습니다.
- 종류 : always, on-success, on-failure, on-abnormal, on-abort, on-watchdog
- TimeoutSec
- systemd가 서비스를 중지 혹은, 서비스가 failed(kill)되어 중지되기까지의 시간을 정의할 수 있습니다.
- 해당 timeout은 TimeoutStartSec 과 TimeoutStopSec로 나눠 작성될 수 있습니다.
- systemd가 서비스를 중지 혹은, 서비스가 failed(kill)되어 중지되기까지의 시간을 정의할 수 있습니다.
5. 참고 링크
https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files
반응형
'Linux' 카테고리의 다른 글
[Linux] 리눅스 RPM 이란? (0) | 2024.01.23 |
---|---|
[Linux] Swappiness 확인 및 설정 (0) | 2021.12.23 |
[Linux] SWAP 메모리란? (스왑 메모리, 스왑 파티션) (0) | 2021.12.23 |
[Linux] Chmod, Chown 사용 방법 (0) | 2021.11.23 |
리눅스의 역사(GNU/GPL) (0) | 2021.11.09 |