Programming/Linux

데몬(daemon) 프로세스의 정의와 실행 방법

Jan92 2022. 7. 27. 23:58

데몬 프로세스 정의와 실행 방법

프로젝트의 개발서버 배포 과정에서 데몬을 사용하여 서비스의 배포와 관리를 자동화할 수 있다는 것을 알게 되었고, 실제 적용해보면서 정리한 내용입니다. 내용 참고하시고 잘못된 부분은 지적해주시면 확인하고 공부하여 다시 수정하겠습니다. 미리 감사드립니다.

 

 


 

 

프로세스란? (background, foreground)

데몬(daemon)에 대해서 이해하기 위해서 먼저 프로세스에 대해서 간단하게 살펴보겠습니다.

 

프로세스(process)는 연속으로 실행되고 있는 컴퓨터 프로그램(program)을 의미하는데요. 프로세스는 포그라운드(foreground) 프로세스와 백그라운드(background) 프로세스로 나눌 수 있습니다.

 

각각에 대해서 살펴보면 포그라운드 프로세스는 인터넷 브라우저, 인텔리제이, 카카오톡 등, 눈에 보이는 프로그램을 말하는데요. 반면 백그라운드 프로세스는 백신 프로그램이나, 그래픽 드라이버와 같이 눈에 보이지 않는 프로그램들을 말하는 것입니다.

또한 포그라운드 프로세스의 경우 사용자와 대화할 수 있는 표준 입출력 장치 즉, 터미널과 키보드(tty 또는 pts)를 사용하지만, 백그라운드 프로세스의 경우 사용자에게 어떤 장치를 통해 값을 전달받는 것이 아니라, 스스로 동작하는 프로세스를 의미합니다.

 

(이 두 가지 개념의 경우 리눅스뿐만 아니라 모든 운영체제에서 사용되는 개념입니다.)

 

 

 

daemon

데몬(Daemon)이란?

데몬은 유닉스(Unix) 운영체제에서 부팅 시 자동으로 켜져, 백그라운드에서 계속 실행되는 프로세스를 의미합니다.

'백그라운드에서 계속 실행되는 프로세스'라는 말에서 알 수 있는 것처럼, 데몬은 프로세스의 범주 안에 속하는 것인데요.

 

데몬은 백그라운드 프로세스에 속하기 때문에 백그라운드 프로세스와 마찬가지로 TTY(터미널 장치)를 가지고 있지 않으며, 추가로 PPID(parent id)가 1이고, SID(session id) 역시 자신의 아이디와 같다는 특징이 있습니다.

 

유닉스(리눅스를 포함한) 운영체제에서 이름이 'd'로 끝나는 프로세스들이 대표적인 데몬 프로세스라고 볼 수 있으며, 웹서버 또한 서버에서 터미널을 통해 실행될 수는 있지만, tty 또는 pts 등을 사용하여 사용자와 대화할 필요가 없기 때문에 대표적인 데몬 프로세스로 볼 수 있습니다.

ex) inetd, httpd, nfsd, sshd, lpd, systemd, ftpd, syslogd 등이 있습니다.

 

(init 데몬은 1번 프로세스이며, 대부분의 조상 프로세스가 됩니다.)

 

 

 

데몬이 백그라운드에서 계속 실행되고 있다는 것은 요청이 오면 즉시 대응할 수 있도록 대기 중이라고도 볼 수 있는데요.

데몬이 실행되는 방식은 'Stand alond', 'Xinetd' 두 가지입니다.

 

* Stand alone

데몬이 독자적으로 구동되는 방식으로 혼자서 요청을 받아 처리합니다. 메모리에 상주하며 항상 구동되고 있기 때문에 요청에 대한 응답 속도가 빨라서 요청이 빈번하게 일어나는 프로세스에 많이 사용됩니다.

속도는 빠르지만 메모리에 계속 상주하며 구동되고 있기 때문에 부하를 줄 수 있다는 점은 알아두어야 하는 부분입니다.

ex) sendmail, apache, mysqld 등이 있습니다.

 

* Xinetd

다른 데몬들의 상위에 존재하며, 슈퍼 데몬(Super Daemon)이라고도 불립니다.

요청이 왔을 때 자신(xinetd)에게 종속된 하위 데몬을 실행시키는 방식이지만, xinetd 자체는 stand alone 방식으로 동작합니다.

하위 데몬의 기준으로 본다면 응답 처리 속도는 위 stand alone 방식에 비해서 느리지만, 요청이 들어오지 않을 때는 휴먼 상태가 되어 메모리를 사용하지 않는다는 장점이 있으며, 요청이 빈번하지 않은 서비스에서 사용됩니다.

ex) telnet, finger, ftp, shell 등이 있습니다.

 

윈도우 운영체제에서는 서비스(Service)가 데몬과 같은 역할을 하는 백그라운드 프로세스입니다.

 

 


 

 

데몬 프로세스 생성 및 사용 방법

(예시의 경우 웹 서비스인 .jar 파일의 구동을 데몬 프로세스로 만들어서 systemd에 등록하고 사용하는 방법입니다.)

 

vi /etc/systemd/system/[데몬 프로세스 이름].service

vi /etc/systemd/system/daemontest.service

systemd/system 하위에 만들고자 하는 데몬 프로세스를 먼저 만들어야 하는데요.

 

 

daemontest.service

[Unit]
Description=Daemon Test Service
After=syslog.target

[Service]
Type=simple
WorkingDirectory=/home/mnlst2019c
ExecStart=java -jar /home/mnlst2019c/daemon_test-0.0.1-SNAPSHOT.jar

[Install]
WantedBy=multi-user.target

편집기를 통해 위에서 생성한 데몬 파일의 내부에 내용을 넣어줍니다.

/home/mnlst2019c 디렉터리 아래에 있는 웹 서비스인 daemon_test-0.0.1-SNAPSHOT.jar를 데몬으로 만들어서 실행한다는 내용입니다.

(해당 설정은 아주 기본적인 세팅이며, 외에도 여러 가지 옵션들을 설정할 수 있는데 해당 부분은 추후에 정리해서 포스팅으로 남겨보도록 하겠습니다.)

 

* 저장 시 E212: Can't open file for writing 오류가 발생하는 경우는 권한 문제이기 때문에 sudo 명령어를 추가해서 시도하면 됩니다.

 

 

// 등록된 서비스 시작
systemctl start daemontest

// 재부팅 후에도 서비스가 시작되도록 서비스 등록
systemctl enable daemontest

// 서비스 상태 확인
systemctl status daemontest

데몬 파일이 만들어지고 나면 다음과 같은 명령어를 통해 서비스를 관리할 수 있습니다.

 

 

 

<  참고자료 > 

참고자료이며, 조금 더 깊은 내용이 담긴 포스팅입니다. 해당 내용이 부족하시다면 함께 참고하시면 좋을 것 같습니다.

 

 

[Linux] 데몬(Daemon) 프로세스 만들기

데몬(daemon)이란? '데몬(daemon)' 프로세스는 리눅스 운영 체제서 사용하는 프로세스의 일종으로써, 시스템 시작이 시작할 때 그 생명을 시작하여, 우리가 알지 못하는 백그라운드에서 자신의 할 일

kukuta.tistory.com

 

 

데몬(daemon) 프로세스란 무엇인가?

오늘. 누군가가 "데몬(daemon) 프로세스"가 도대체 뭔가요?"라는 질문 던진 것을 인터넷의 한 게시판에서 봤다. 많은 개발자나 엔지니어들이 IT 바닥에서 일을 하면서도 쉽게 접하기 어려운 분야가

blogger.pe.kr

 

 

< 실행 및 관리 방법 참고 자료 >

 

[Linux] systemd 에 Service 등록

[Linux][RHEL/CentOS] systemd 에 Service 등록 Systemd 에 사용자가 자주 사용하는 Service 를 등록하고 Systemd 를 통해 관리 할 수 있습니다. 아래는 Systemd 에 등록할 Service Script 입니다. Systemd test 용 Script #!/bin/b

chhanz.github.io