Infrastructure & Systems/Linux
[Linux] systemd (System Daemon)
EndiYou
2024. 11. 19. 08:04
Linux에서 사용되는 시스템 및 서비스 관리자
1. 역할 및 기능
- 운영체제 초기화 (운영체제 핵심 구성요소 시작, 관리하는 역할)
- Kernel 로딩 후 루트 프로세스 실행
- Hardware 초기화 (네트워크 카드, 그래픽 카드, 사운드 카드 등 장치 드라이버 초기화)
- File System 마운트 (/etc/fstab 파일 정보 기반 시스템 마운트)
- System Service 시작 (Network Service, SSH Server..)
- 사용자 환경 준비 (Display Manager 실행)
- System Status Monitoring (systemctl status로 보이는 서비스 상태나 시스템 자체의 이벤트 관리)
- System 종료 관리 (시스템과 관련된 열린 파일 종료하고, 실행 중인 프로세스 안전하게 종료)
- Unit 관리 (Service, Socket, Device, Mount Point...)
- .service / .socket / .device / .mount 확장자를 가진 설정 파일로 정의
- 다음 세 개의 디렉터리에 Unit 설정 파일을 분산 관리
- /etc/systemd/system/ : runtime으로 생성된 임시 Unit 파일 저장소
- /usr/lib/systemd/system/ : 패키지 관리자에 의해 설치된 default Unit 파일 저장소
- 사용자 정의 Unit 설정 파일은 /etc/systemd/system/ 디렉터리에 정의
- 의존성 관리
- 서비스 간의 의존성을 자동으로 관리
- 의존성 관리를 통해 부팅 시 여러 서비스 병렬 시작이 가능하게 하고, 부팅속도 향상에 기여
- cgroup 기능을 이용해 프로세스 그룹의 리소스 사용을 제어
- 시스템 로그를 중앙에서 관리하는 journalctl 서비스 제공
- networkd 를 이용해 네트워크 관리
2. 사용자 정의 Unit 구성요소
- [Unit] : 서비스에 대한 설명, 의존성 정의
- [Service] : 서비스 실행 방법, 환경 지정
- [Install] : 서비스 활성화 방법 정의
2.1 사용자 정의 Unit 설정 예시 (.service 확장자 기준)
- /etc/systemd/system/ 디렉터리에 {SERVICE_NAME}.service 확장자 형식으로 파일 생성
vim /etc/systemd/system/example_application.service
- [Unit] / [Service] / [Install] 섹션 구성
[Unit]
Description=Run main.py on server boot
After=network.target
[Service]
ExecStart=/usr/bin/python /home/ec2-user/tests/backend/src/main.py
WorkingDirectory=/home/ec2-user/tests/backend/src
Restart=always
User=root
StandardOutput=append:/var/log/example_application.log
StandardError=append:/var/log/example_application.log
[Install]
WantedBy=multi-user.target
- [Unit]
- Description : 서비스에 대한 설명
- After : Network 서비스 이후 실행하도록 설정
※ 기타 지시자: Before, Wants, Requires, BindsTo, Conflicts, PartOf, OnFailure
- [Service]
- ExecStart : 서비스 실행 명령어 지정
- WorkingDirectory : 서비스 실행할 작업 디렉토리 설정
- Restart : 서비스가 종료되면 항상 재시작하도록 설정
- User : 서비스 실행 사용자 지정
- StandardOutput=append: 서비스 표준 출력(stdout)을 특정 위치에 log 파일로 추가 하도록 지정
- StandardError=append: 서비스 표준 에러(stderr)를 특정 위치에 log 파일로 추가 하도록 지정
- [Install]
- WantsBy : 서비스를 어떤 TARGET에게 연결할지 지정
- 지정된 TARGET이 활성화 될 때 해당 서비스도 활성화 되도록 지정하는 것
- TARGET List : multiiuser-target, network.target, network-online.targer, basic.target
- WantsBy : 서비스를 어떤 TARGET에게 연결할지 지정
3. 관련 명령어
3.1 systemctl
서비스 관리 (시작, 종료, 재시작 등)를 위한 주요 명령어
- 서비스 시작
systemctl start example_application.service
- 서비스 종료
systemctl stop example_application.service
- 서비스 재시작
systemctl restart example_application.service
- 서비스 자동 재실행
systemctl enable example_application.service
- journalctl : 관련 로그 조회 명령