일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 카카오
- Spring
- Kakao
- 자바
- 네트워크
- 운영체제
- 코딩테스트
- Java
- 리눅스
- 캐시
- 엘라스틱서치
- Elasticsearch
- DPDK
- 도커
- 스프링부트
- C
- 프로그래머스 #카카오 #IT #코딩테스트
- 백엔드
- docker
- programmers
- 스프링
- 알고리즘
- 개발자
- 쿠버네티스
- 파이썬
- Python
- IT
- springboot
- 프로그래머스
- Linux
- Today
- Total
저고데
[Linux] service와 systemd에 대해서 알아보자 본문
들어가며
Linux 시스템을 관리하다 보면 systemctl이라는 명령어를 자주 보게 되는데, 이번 시간에는 이와 관련해서 이야기 해보도록 하겠다.
우선 Daemon에 대해서 알고 넘어가야할 필요가 있다.
Daemon은 사용자 개입 없이 백그라운드에서 지속적으로 실행되는 프로그램으로, 시스템의 여러 작업을 자동으로 수행한다.
이러한 Daemon들 중에서는 네트워크 관리 및 하드웨어 설정 등과 같이 OS가 안정적으로 운영하기 위한 역할을 하는 daemon들도 존재한다.
Linux는 이러한 데몬들이 시스템 부팅 시에 자동으로 실행되도록 설정할 수 있는데, 이를 관리하는 핵심 요소가 바로 systemd와 systemctl이다.
그럼 본격적으로 각각에 대해서 알아보자.
Daemon이란
Daemon은 기본적으로 사용자가 직접 제어하지 않고 백그라운드에서 여러 작업을 수행하는 프로그램이다.
필자는 처음에 이 '백그라운드 실행'에 대해서 의문점을 가졌었다.
'어떻게 뒤에서 실행한다는 이야기지?'하고서 말이다.
간단하게 백그라운드 실행의 원리에 대해서 이야기하자면 다음과 같다.
이는 시스템 프로그래밍과 상당히 유사한 내용인데, 일종의 상속과 같은 개념으로 프로세스는 본인과 동일하게 프로세스를 생성할 수가 있다. (이 행위를 fork라고 하며, 이렇게 해서 탄생한 프로세스의 관계를 부모 프로세스-자식 프로세스라고 한다.)
이 때, 부모 프로세스가 삭제되면 어떻게 될까?
Linux에서의 데몬은 일반적으로 부모 프로세스로부터 fork하여 자식 프로세스로 생성된다.
자식 프로세스가 생성이 된 후, 부모 프로세스를 종료하여 자식 프로세스를 홀로 만들어서 독립성을 갖추어 백그라운드에서 안정적으로 작업을 수행할 수 있다.
시스템이 필요로 하는 작업을 자동으로 처리하며, 부팅 시에 자동으로 실행되어 시스템이 종료되거나 특정 Signal이 입력될 때까지 지속된다.
따라서 Linux에서는 부팅 시, 네트워크 연결을 관리하거나 하드웨어 상태를 모니터링하는 등의 시스템 안정성에 필수적인 역할을 하는 Daemon들이 시스템 초기화 단계에서 자동으로 실행된다.
service란
Linux OS가 부팅되었을 때, 생성되며 종료될 때까지 실행되는 프로세스 및 설정 파일들을 service라고 한다.
Linux에 기본으로 있는 시스템 데몬 뿐만 아니라, 사용자 정의 데몬을 통치한다.
이 말은 즉, 사용자가 자유롭게 데몬 프로세스를 부팅 시에 실행하도록 등록이 가능하다는 것이다.
앞서 언급한 daemon들은 이러한 service 설정 파일에 의해서 생성되는 것이다.
service 설정 파일은 기본적으로 /etc/systemd/system 경로에 존재하는데, 사용자가 형식에 맞게 원하는 내용을 service 경로에 작성한다면, 사용자 설정 Daemon을 생성할 수가 있다.
service 파일은 Dockerfile과 유사하게 구성을 나누어서 생성되는데, 크게 [Unit], [Service], [Install] 섹션이 존재한다.
이번 시간에는 간단하게 각 세션에 대해서만 짚고 넘어가도록 하겠다.
- [Unit] 섹션: 서비스의 설명과 종속성, 동작 조건 등을 정의한다.
- [Service] 섹션: 서비스 실행 방법과 환경 설정을 정의한다.
- [Install] 섹션: 서비스 설치와 관련된 정보를 포함하여 서비스가 어떤 타겟에서 활성화될지를 설정한다.
이러한 설정 파일을 통해서 service의 동작을 세부적으로 정의하고, 필요에 따라 특정 상황에서만 실행되도록 구성할 수 있다.
systemd이란
Linux 시스템에서 부팅 시 이러한 데몬을 관리하는 역할을 수행하는 프로그램이 바로 systemd이다.
systemd는 리눅스 부팅 시 가장 먼저 실행되는 프로세스로, PID가 1인 최상위 프로세스이다.
이 점에서 systemd는 시스템의 모든 프로세스들의 직간접적인 부모 프로세스로서의 역할을 하며, 시스템에 필요한 각종 데몬을 초기화하고 관리하는 역할을 한다.
systemd는 기존의 init 시스템을 대체하기 위해서 도입되었으며, 속도와 효율성 면에서 우수하여 현대 Linux에서 기본 초기화 시스템으로 자리 잡고 있다.
또한, systemd는 아래와 같은 장점을 지니고 있다.
- 병렬 처리 지원: 여러 데몬을 병렬로 초기화하여 부팅 시간을 단축한다.
- 의존성 관리: 각 서비스의 의존성을 관리하여 특정 서비스가 시작하기 전 필요한 서비스가 먼저 시작되도록 한다.
- 빠른 서비스 시작: 새로운 서비스를 손쉽게 추가하고 관리할 수 있도록 직관적인 인터페이스를 제공한다.
- 기타 기능: 타이머, 로깅, 네트워크 설정 등의 다양한 시스템 관리 기능을 내장하고 있어, 다른 도구 없이도 다양한 시스템 작업을 자동화할 수 있다.
systemctl이란
systemctl은 systemd가 관리하는 service(daemon)을 제어할 수 있도록 도와주는 명령어이다.
이는 CentOS 7부터 사용되기 시작했으며, systemctl을 통해서 service 시작, 중지, 재시작, 상태 확인 등을 간편하게 수행할 수 있다.
아래의 명령어들이 대표적으로 사용되는 명령어로 직관적인 것이 특징이다.
- 서비스 시작: sudo systemctl start [service이름]
- 서비스 중지: sudo systemctl stop [ service 이름]
- 서비스 재시작: sudo systemctl restart [ service 이름]
- 서비스 상태 확인: sudo systemctl status [ service 이름]
- 서비스 부팅 시 자동 시작 설정: sudo systemctl enable [ service 이름]
- 서비스 부팅 시 자동 시작 해제: sudo systemctl disable [ service 이름]
마치며
오늘은 이렇게 Linux에서의 시스템 관리 요소에 대해서 알아보았다.
Linux에서는 Daemon을 통해서 시스템의 안정성 및 효율성을 가지는데, 또한 이를 관리하기 위해서 systemd와 systemctl을 사용하여 제어하는 것을 확인할 수 있었다.
하지만, 이를 통해서 관리를 위해서 관리자를 두고, 또 이러한 관리자를 관리하기 위해서 새로운 도구를 만드는 것이 과연 효율적이라는 생각이 들었다.(오랫동안 사용되는 이유가 있겠죠 ?!)
'Linux' 카테고리의 다른 글
[Linux] 하나의 프로세스에서 명령어를 사용할 때의 고려해야 할 점들 (0) | 2025.03.22 |
---|---|
[Linux] apt 명령어에 대해서 알아보자 (1) | 2024.12.11 |
[Linux] DPDK 라이브러리에서 Cuckoo Hash Table 사용하기 (0) | 2024.09.17 |
[Linux] DPDK가 무엇인지 알아보고 직접 설치해보자 (2) | 2024.09.16 |
[Linux] 1. Linux 부팅 과정에 대해서 알아보자 (4) | 2024.08.28 |