Linux - 프로세스 - 3 (데몬 프로세스)

2021. 8. 17. 21:16Linux

이번 시간에는 데몬 프로세스에 대해 공부 해보겠습니다.

 

데몬 프로세스 :  백그라운드로 동작하면서 특정한 서비스를 제공하는 서버 프로세스입니다.

이 프로세스들은 사용자의 요청에 상시 응답 해줘야 하기에 24시간 실행중이며 이름이 d로 끝나는 경우가 많습니다. 예) httpd, sshd, inetd 등등

시스템이 부팅될때 함께 실행되고 종료될때 또한 같이 종료됩니다. 그리고 TTY는 ? 인것을 확인 할 수 있습니다.

 

 

데몬 프로세스는 두가지 타입으로 구분됩니다.

 

1. Standalone 타입의 데몬

독자적으로 프로세스가 구동되어 서비스 하는 데몬이며 웹 서버, DB 서버, 센드메일 서버 등이 있습니다.

Standalone 타입의 데몬은 메모리상에 항상 구동되어야 하기 때문에 자주 요청되는 데몬이 적합합니다.

상시 실행되고 있다가 클라이언트로부터 요청을 받으면 바로 서비스해 주는 데몬입니다

Standalone의 실행 파일은 /etc/init.d 디렉터리에 저장되어 있습니다.

사용 방법 : systemctl start/stop/restart 데몬명

 

2. xinetd 타입의 데몬

사용 빈도수가 적은 데몬들입니다. 요청이 올때마다 메모리에 올라가며 평상시에는 실행되고 있지 않습니다. 설정 파일은 /etc/xinetd.d 디렉터리에 저장되어 있습니다.

이 데몬들은 외부로부터 요청이 들어오면 바로 서비스를 제공하지 않습니다. 예를 들어 클라이언트가 telnet이라는 xienetd 타입의 데몬에 요청을 하면 telnet이 바로 실행되는 것이 아닙니다. 우선 xinetd 데몬이 이 요청을 먼저 받습니다. xinetd 데몬과 xinetd 타입의 데몬은 서로 다른 것입니다.

 

xinetd 데몬 : Standalone 타입의 데몬이며 슈퍼데몬이라고 부릅니다.

xinetd 데몬은 xinetd 타입의 데몬들의 상위 존재하며 이들을 관리하는 역할을 합니다. 그러므로 telnet에 요청이 들어오면 슈퍼데몬이 먼저 요청을 받고 요청한 사용자가 허가를 받은 사용자인지, 현재 하위 데몬(xinetd 타입의 데몬)에 telnet 데몬이 있는지를 검사한뒤 telnet 데몬의 서비스를 사용할 수 있도록 연결해주는 것입니다.

수퍼데몬의 설정 파일은 /etc/xinetd.conf 이며 수퍼데몬은 설정파일을 통해 요청한 데몬의 유무를 확인 합니다

 

앞으로 제 블로그는 여러 데몬들에 대해 공부한 내용들을 추가로 올릴것입니다. 이번 시간에는 작업 예약할 때 사용하는 데몬들을 알아보겠습니다. 

 

1. cron : 주기적으로 반복되는 작업을 수행할 때 사용합니다.

crond 데몬으로 작동하며 기본적으로 설치되어 있는 데몬 입니다.

 

시스템의 백업을 주기적으로 하고 싶을때 이 데몬을 사용하면 됩니다. 일일히 백업을 하기에는 귀찮고 관리자가 규칙적으로 백업을 할 수 도 있겠지만 오랜 시간동안 규칙적으로 수행하기에는 무리가 있습니다. 하지만 crond 데몬을 사용하면 자동으로 관리자가 설정한 주기대로 백업을 할 수 있습니다.

또한 리눅스를 서버로 사용할 경우 백업 작업을 사람들이 많이 사용하는 시간대에는 하기 어렵습니다. 그렇기 때문에 사용자들의 접속 빈도가 적은 새벽에 자동으로 백업을 하도록 하기 위해서는 crond 데몬을 사용하는 것이 좋습니다.

 

사용방법

편집 : crontab -e

확인 : crontab -l

삭제 : crontab -r

 

설정파일은 두가지 있습니다. /var/spool/cron/사용자명, /etc/crontab

등록 방법 : 보통 6개의 필드를 입력합니다.

'분' '시' '일' '월' '요일' '실행할 작업' 이것은 /etc/crontab 파일에 자세히 설명 되어 있습니다.

 

 

우선 crontab -e 를 사용해 등록해보겠습니다 crontab -e 로 등록하면 /var/spool/cron 디렉터리에 사용자명으로 파일을 만든후 등록한 내용을 저장합니다

 

 

root 사용자가 현재 등록한것이 없다는 것을 확인 할 수 있습니다

 

 

내용을 등록하자 root 이름의 파일이 생성되었고 등록한 내용이 저장되어 있는것을 확인 할 수 있었습니다.

등록한 내용은 crontab -l 명령어로도 확인 가능합니다.

 

 

이는 매달 19일 04시 정각에 사용자들의 홈디렉터리를 /backup 디렉터리로 백업하겠다는 뜻입니다

* : 모든 월, 모든 요일 모든을 의미합니다.

제가 crond 데몬은 설정 파일이 두개 있다고 했습니다. crontab -e 로 등록을 하자 /var/spool/cron/사용자명 설정파일에는 등록이 되었습니다. 그럼 다른 설정 파일인 /etc/crontab 파일에도 등록이 되었는지 확인 해보겠습니다.

 

 

등록이 안되어 있는 것을 확인 할 수 있습니다. 

즉 crontab -e 를 통해 등록을 할 경우 /var/spool/cron/사용자명 파일에 등록이 되며 crontab -l로 확인 또는 crontab -r로 삭제가 가능합니다.

하지만 /etc/crontab에는 등록이 안됩니다. /etc/crontab에 등록하려면 직접 파일을 열고 등록해야하며 이렇게 등록된 내용은 crontab -l 로 확인 할 수 없으며 등록시 crontab -e 에서와는 달리 사용자명 포함 7개의 필드를 등록해야 합니다.

 

 

root 라고 사용자명이 추가가 되었으며 이는 매일 root 계정으로 01시 0분에 yum 업데이트를 하겠다는 뜻입니다.

/etc/crontab에 등록한 내용은 crontab -l 로 확인 할 수 없는 것을 알 수 있습니다.

이번엔 아까 crontab -e 로 등록한 내용을 지워보겠습니다.

 

 

/var/spool/cron/root 파일 자체가 사라진것을 확인 할 수 있습니다.

 

정리 하겠습니다. crond 데몬은 설정파일이 두개 있있습니다. /var/spool/cron/사용자명 파일과 /etc/crontab 파일입니다. crond 데몬을 사용해서 작업 예약을 하려면 각 설정파일에 등록을 해야합니다.

두 설정파일은 서로에 영향을 주지 않습니다. 한쪽에 등록을 해도 다른 한쪽에서 그 내용을 확인 할 수 없다는 이야기 입니다. 등록은 /var/spool/cron/사용자 파일에는 '분 시 일 월 요일 작업' 으로 6개 필드를 등록시키고 /etc/crontab 파일에는 사용자 필드를 포함시켜 '분 시 일 월 요일 사용자 작업' 순으로 7개의 필드를 등록시켜야합니다. 

crontab -e 명령어를 사용해서 등록할시 /var/spool/cron/사용자명 파일이 생성되어 내용이 저장이 됩니다. 등록한 내용은 crontab -l, crontab -r 명령어로 확인, 제거를 할 수 있습니다. 

/etc/crontab 파일에 등록하기 위해서는 파일을 직접 열고 등록을 해야 하며 보통 root 사용자의 설정파일로 사용됩니다.

 

주기적으로 실행할 작업들을 디렉터리에 넣어놓고 실행 시킬수도 있습니다. /etc 아래에는 다음과 같은 파일들이 있습니다. 

 

 

주기적으로 실행할 작업들을 주기별로 구분 시킨뒤 실행시킬 수 있는 것입니다. 디렉터리 안에 스크립트 파일들을 저장해 두고 crond 설정 파일에 디렉터리를 등록하면 등록한 디렉터리내에 있는 실행 파일들을 지정한 시간때 마다 실행시키는 것입니다. 

 

예를 들어 매일 03시 30분 마다 yum 업데이트를 시키고 매일 03시 30분마다 시스템 부팅을 시키도록 만들어 보겠습니다. 우선 파일을 두개 만들겠습니다. 이 두 작업은 daily 작업이기 때문에 /etc/cron.daily 디렉터리에 만들도록 하겠습니다. 굳이 파일을 두개 안만들고 한 파일에 만들어도 됩니다. 저는 구분 하기 위해서 두개의 파일에 만들겠습니다.

 

 

실행 파일로 만들기 위해 x 권한을 주도록 하겠습니다.

 

 

이제 등록해보겠습니다.

 

 

항상 등록후 데몬을 재실행 시켜줘야 등록한 내용이 적용이 됩니다.

 

2. at : 주기적으로 실행하는 cron과는 달리 at은 정해진 시간에 한번만 실행합니다.

 

옵션 

-t time_date : 작업 시간 지정

-l : 현재 대기중인 작업 목록 출력

-r job_id : job_id에 해당하는 작업을 목록에서 삭제 unix

-d job_id : job_id에 해당하는 작업을 목록에서 삭제 linux

제가 사용하는 Centos 7 에서는 -r, -d 둘다 사용 가능합니다.

 

사용법

 

at -t 옵션으로 시간을 지정한뒤 지정한 시간에 실행할 작업을 입력하고 ctrl + d 를 누르면 등록이 된것입니다.

 

 

하지만 -t 옵션을 사용해서 시간을 지정하는 것보다 다음과 같이 지정하는 것이 더 편리합니다.

 

 

now를 사용하면 현재 시간으로 부터 1시간 후에 작업(reboot)를 실행시키겠다고 등록 한 것입니다.

이번엔 제거 해보겠습니다.

 

 

-r, -d  둘다 정상적으로 제거 되는 것을 볼 수 있습니다.

atq와 atrm으로 각각 조회와 제거를 할 수 있습니다.

at -l = atq

at -r, at -d = atrm

 

 

정상적으로 조회와 제거가 되는것을 볼 수 있습니다. 이번엔 조회를 했을때의 필드들에 대해 알아보겠습니다.

14 Thu Aug 19 17 : 21 : 00 2021 a root

작업번호 시간 queue 사용자명 순입니다 나머지는 다 알겠지만 이 queue는 무엇일까요?

queue는 저희가 입력한 작업들이 들어가는 공간이라고 생각하면 됩니다. 

사용 가능한 문자는 a~z, A~Z 까지 가능하며 a가 기본 큐입니다. -q 옵션을 사용해서 직접 설정해줄 수 있습니다.

 

queue가 전부 a인것을 볼 수 있습니다.

 

 

정상적으로 queue를 변경 할 수 있었습니다. 높은 문자를 사용할 수록 nice값(우선순위)를 높여서 실행 할 수 있습니다.

 

이상으로 데몬 프로세스에 대해 배워보았습니다. 다음 시간에는 런레벨에 대해 공부해보는 시간을 가져보겠습니다.

 

 

 

다음 내용 

Linux - Run Level

'Linux' 카테고리의 다른 글

Linux - 부팅  (0) 2021.08.23
Linux - Run Level  (0) 2021.08.19
Linux - 프로세스 - 2 (종료, 종류, 제어)  (0) 2021.08.17
Linux - 프로세스 - 1 (정의)  (0) 2021.08.16
Linux - locate & find  (0) 2021.08.10