2022-05-03 Daemon 실행

2022. 5. 3. 23:17BE/Linux

이 글은 목소리가 감미로우신 이고잉님의 오픈튜토리얼 리눅스 강의를 듣고 정리한 내용입니다.


Daemon

 

daemon은 사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램을 말한다.

 

웹서버와 같은 상시 수행해야 하는 작업들을 다룬다.

 

daemon의 대표적인 예시로 apache2(웹서버)를 들 수 있다.

 

daemon으로 실행되는 프로그램들이 있는 디렉터리를 확인한다.

 

cd /etc/init.d

ls -al

# Linux 기준. macOX는 다르다.

 

리눅스의 /etc/init.d는 daemon들이 모여있는 디렉터리다.

 

cd /etc/rc3.d/

ls -al

 

리눅스의 /etc/rc3.d/에는 daemon들의 링크가 모여있는 디렉터리가 있다.

 

rc3.d는 CLI환경에서 실행되는 daemon의 링크를 모아놓은 디렉터리고

 

rc5.d는 GUI환경에서 실행되는 daemon의 링크를 모아놓은 디렉터리다.

 

400

 

rc3.d 디렉터리에서 ls -al 하면 lrwxrwxrwx라고 나오는 것들은 link다.

 

윈도우의 바로 가기 같은 것이다.

 

대문자 S로 시작하는 링크들은 CLI 즉 콘솔로 부팅된 경우 실행되는 daemon들이고

 

대문자 K로 시작하는 링크들은 종료되는 daemon들이다.

 

또 S나 K 뒤에 오는 숫자들은 실행의 우선순위를 나타낸다.

 


service

# daemon 프로그램을 끄고 킬려면 service를 사용해야 한다.

sudo service apache2 start

ps aux | grep apache2

sudo service apache2 stop

ps aux | grep apache2

service를 이용해서 항상 실행해야 하는 daemon 프로그램을 시작하고 끝내 본다.

 

자동으로 실행되게 하려면 etc/rc3.d/ 아래에 링크를 생성하면 된다.

 


macOS에서의 daemon

 

macOS에선 daemon을 다루는 방법이 Linux와는 다르다.

 

macOS에선 launchd 를 이용해서 daemonagent를 다룬다.

 


agent

 

에이전트에 대한 정의는 에이전트를 보는 시각에 따라 매우 다양하다.

 

일반적으로 다음과 같이 정의할 수 있다.

  1. 에이전트는 특정 목적에 대해 사용자를 대신하여 작업을 수행하는 자율적 프로세스(autonomous process)이다.
  2. 에이전트는 독자적으로 존재하지 않고 어떤 환경(운영 체제, 네트워크 등)의 일부이거나 그 안에서 동작하는 시스템이다.
  3. 에이전트는 지식 기반(knowledge base)과 추론 기능을 가지며, 자원 또는 다른 에이전트와의 정보 교환과 통신을 통해 문제를 해결한다.
  4. 에이전트는 스스로 환경의 변화를 인지하고 그에 대응하는 행동을 취하며, 경험을 바탕으로 학습하는 기능을 가진다.

데몬(daemon)과 에이전트(agent)의 차이점에 대하여 말해본다면 실행에 있어서 사용자의 존재감?이다.

 

 

Daemon은 사용자의 입력 없이 시스템이 켜지면 백그라운드에서 작업을 수행한다.

웹서버나 데이터베이스 서버와 같은 작업을 수행하기에 적합한 방식이다.

 

Agent은 반면에 사용자의 입력이나 요구에 부합하기 위해서 수행된다. 그렇기에 사용자의 로그인이 필요하다.

 

출처 : [네이버 지식백과] 에이전트 [agent] (컴퓨터인터넷IT용어대사전, 2011. 1. 20., 전산용어사전편찬위원회)

출처 : https://dev-dream-world.tistory.com/89

출처 : https://hiddenviewer.tistory.com/5


Daemon과 Agent의 위치

 

Apple은 BSD-스타일의 initSystemSmarter를 대체하기 위해 launchd를 2005년에 발표했다.

 

macOS는 launchd 프로세스를 통해서 데몬과 에이전트를 관리한다.

 

사용자는 launchctl 명령어를 통해서 launchd를 다룬다.

 

아래는 daemon과 agent가 위치한 디렉터리의 위치다.

 

 

참고 : https://xho95.github.io/macos/daemon/launchd/launchctl/2020/05/18/Running-and-Managing-Daemons-on-Mac.html

참고 : https://dev-dream-world.tistory.com/90

참고 : https://support.apple.com/ko-kr/guide/terminal/apdc6c1077b-5d5d-4d35-9c19-60f2397b2369/mac


Daemon 올리고 내리기

 

launchctl 은 ‘IPC (프로세스 간의 통신-Inter-Process Communication)로 launchd와 통신하는 CLI 프로그램이다.

 

plist 파일(property list file)을 해석하여 launchd 가 이해할 수 있는 양식으로 변환하여 전달.

 

사용자는 launchctl로 launchd를 제어.

  • daemon을 올리거나 내릴 수 있다.
  • launchd 가 제어하는 작업을 시작하거나 중지할 수 있다
  • 환경 설정

 

launchctl load ~/Library/LaunchAgents/myservice.plist

launchctl unload ~/Library/LaunchAgents/myservice.plist

launchctl start myservice.plist

launchctl stop myservice.plist

물론 plist가 있어야 겠지용?

 

시간이 없는 관계로 plist에 관한 내용은 다음에 기회가 되면 포스팅해보자.