데몬(Daemon)이란?
- 운영체제에서 사용자가 직접 제어하지 않아도 백그라운드에서 작업하는 프로그램
- 리눅스 서버가 부팅될 때 백그라운드에서 실행되고 있다가 클라이언트 측에서 요청이 오면 바로 그에 대한 대응을 할 수 있음. 그래서 요청에 대한 응답속도는 빠르지만 항상 백그라운드에서 대기해야하므로 메모리의 효율이 좋지는 않다.
- 부모 프로세스가 PID 1 이고(PPID = 1), 프로세스 트리에서 init 바로 아래에 위치한다. 즉, 시스템의 첫 프로세스인 init의 바로 하위 프로세스가 된다. (원래 init 이 PID 1인 루트 프로세스 였는데 이를 개선한 systemd가 나왔다. 그래서 최신 시스템 초기화 프로그램으로 systemd가 기본으로 사용된다.)
- 데몬 프로그램의 명령어는 d 로 끝난다. (ex. syslogd, ftpd, httpd .... )
데몬(Daemon) 실행 방법
1) Standalone 타입 데몬
- 데몬이 백그라운드에서 항상 실행되고 있다가 클라이언트로부터 해당 서비스의 요청이 발생하면 즉각 처리한다.
- 각 데몬들은 고유의 메모리를 확보하면서 실행된다.
- /etc/init.d 또는 /etc/rc.d/init.d 에 있는 스크립트 파일로 실행된다.
- <service 이름> start/stop/restart 명령어로 데몬을 관리할 수 있다.
2) inetd 타입 데몬
- 클라이언트 요청이 발생하면 xinetd 프로그램이 해당 요청을 분석하여 필요한 데몬을 메모리에서 실행하여 응답하는 방식이다. 그래서 xinetd 데몬에 의해 wake up 되어 요구하는 서비스를 수행하고 다시 sleep 상태로 전환된다. (xinetd 데몬 자체는 standalone 방식으로 작동한다.)
- super daemon 이라는 특별한 데몬에 의해 간접적으로 실행되는 데몬이다.
- 빠른 처리가 필요 없을 뿐더러 요구 횟수도 빈번하지 않은 서비스의 경우에 사용된다.
- 항상 실행되는 것이 아니라 sleep 상태로 존재하기 때문에 메모리 공간이 필요 없다.
- /etc/xinetd.d 디렉토리에 위치한다.
- Ubuntu에서는 기본적으로 super daemon이 설치되어 있지 않아 Package Manager을 통해 설치해야한다.
SystemVinit(=init)과 systemd의 차이
공통점 ㅣ
리눅스 커널 부팅이 완료된 뒤 실행되는 첫 번째 프로세스이며 동시에 커널이 직접 실행하는 유일한 프로세스이다.
리눅스 시스템의 초기화 프로세스를 담당하는 시스템 서비스이기도 하다. 두 시스템 모두 다양한 서비스를 시작하고 중지하며 종료하는데 사용된다.
차이점ㅣ SystemVinit(=init)은 리눅스 커널의 초기 버전에서 사용되는 오래된 버전이며, 최근에는 그보다 최신 버전인 systemd를 더욱 많이 사용한 배포판들이 나오는 추세이다. 또한 systemd는 init + service manager 이라고 생각하면 쉽다.
- RHEL5까지 RedHat은 SystemVinit을 기본 시스템 초기화 프로그램으로 사용했지만, 그 이후에는 systemd로 전환했다.
- CentOS 6 까지는 서비스 관련 파일들이 /etc/rc.d/init.d에 위치애 있었지만 CentOS 7 부터는 서비스들이 대부분 Unit 으로 분리되어 .service 형식의 파일명을 가지며 systemctl 명령어로 서비스 제어가 가능하다.
(추가) init은 시작할 프로그램을 구동하는 쉘 스크립트를 특정 run-level의 rc 디렉토리에 추가하는 방식의 구조를 가졌다. init은 부팅과정에서 단계적으로 run-level을 올려가며 해당 run-level에 포함된 스크립트들을 순차적으로 실행시키기 때문에 설정이 복잡하고 속도가 느리다는 단점이 있었다. 그래서 이런 문제를 해결하기 위해 Red Hat에서 systemd를 만들기 시작했다.
Systemd 의 특징
서비스들간의 의존성을 해치지 않으면서 병렬로 시작 프로그램들을 실행시킴으로써 부팅 속도를 향상시키고, 프로그램 실행을 위한 파일로는 쉘 스크립트가 아닌 .service 라는 systemd만의 unit 을 통해 더욱 체계적이면서 가독성이 높다. 또한 시스템 상태를 모니터링할 수 있다. 그리고 프로세스 간의 통신은 D-bus에서 담당한다. service unit 이라는 개념을 사용하는데, 이는 서비스의 이름, 설명, 시작 순서 등을 정의하는 파일이다.
다음 게시물에서는 최근 가장 보편적으로 사용하고 있는 systemd에 대해 좀 더 자세히 알아보겠다.
'OS' 카테고리의 다른 글
[ Linux ] 로그 아키텍처 (Log Architecture) (4) | 2024.11.06 |
---|---|
[ Linux ] Systemd 세부 특징 (1) | 2024.11.04 |
[ Monitoring ] AWS EC2 CloudWatch Metrics (0) | 2024.10.30 |
[RHEL] dnf-automatic 을 이용한 패키지 업데이트 자동화 (4) | 2024.10.29 |
ARM 과 x86 차이 (Architecture : 컴퓨터 시스템의 설계) (3) | 2024.10.25 |