Linux: 데몬 작업

간단히 말해서 데몬은 백그라운드에서 실행되는 서비스 프로세스입니다.

Linux에서 데몬으로 작업하는 것은 새로운 사용자에게 까다로울 수 있습니다. 역사적인 짐과 이전 버전과의 호환성으로 인해 동일한 작업을 수행할 수 있는 여러 가지 방법이 있습니다.

먼저 약간의 배경 지식: 부트 로더가 커널을 로드하고 모든 것이 초기화된 후 마지막 단계는 init 프로세스를 시작하는 것입니다. 이 프로세스는 루트 프로세스라고도 하며 PID 1(PID 0은 커널의 일부 - 소위 sched 또는 swapper 프로세스)을 가집니다.

체계적인



요즘에는 PID 1로 실행 중인systemd Linux 배포판을 사용하고 있을 가능성이 높습니다.

systemd에서 서비스를 제어하려면 주로 systemctl 명령을 사용합니다.

서비스 상태 확인:

systemctl status myservice.service


서비스 시작 및 중지:

systemctl start myservice.service
systemctl stop myservice.service

systemctl restart myservice.service


서비스 활성화 및 비활성화(부팅할 때마다):

systemctl enable myservice.service
systemctl disable myservice.service


새로운 서비스 추가



새 서비스를 추가하려면 유닛 파일을/etc/systemd/system/디렉토리에 넣기만 하면 됩니다.

최소한의/etc/systemd/system/myservice.service는 다음과 같을 수 있습니다.

[Unit]
Description=My Awesome Service

[Service]
# Simple service won't do any forking
Type=simple
ExecStart=/path/to/command

[Install]
# Start the service before we get to multi-user mode
WantedBy=multi-user.target


이제 "daemon-reload"를 수행하면 됩니다(systemd에 새 파일을 선택하도록 지시).

systemctl daemon-reload


서비스를 활성화하고 시작합니다.

systemctl enable myservice.service
systemctl start myservice.service

systemctl status myservice.service


SysVInit


systemd는 비교적 최근에 Linux에 추가된 것입니다. 전통적으로 Linux 시스템은 SysVInit를 초기화 하위 시스템으로 사용했습니다. systemd보다 훨씬 간단하고(원래 Unix 철학에 더 가깝습니다) 이 전체 전환 작업은 Linux 커뮤니티에 많은 논란을 불러일으켰습니다. SysVInit를 사용하는 활발하게 유지되는 배포판이 있습니다.

또한 이러한 명령을 사용하는 많은 소프트웨어와 문서가 여전히 있습니다.

SysVInit 아래의 "서비스"는 시작, 중지, 다시 시작 등과 같은 인수에 응답하는/etc/init.d/디렉토리 내의 스크립트일 뿐입니다.

이것은 서비스를 시작하고 중지하는 원래 SysVInit입니다.

/etc/init.d/myservice start
/etc/init.d/myservice stop

/etc/init.d/myservice restart


나중에 service 명령이 추가되었습니다(대부분 위와 동일하지만 항상 그런 것은 아님).

service myservice start
service myservice stop

service myservice restart


(이 명령은 이전 버전과 호환됩니다. 시스템 기반 시스템에서 systemctl를 사용하는 것과 동일하게 작동해야 합니다.)

기본 런레벨에 서비스 추가(부팅할 때마다 활성화):

# Debian-based distros
update-rc.d myservice defaults

# Redhat-based distros
chkconfig myservice on


건방진 녀석



Upstart는 Canonical에서 만든 SysVInit에 대한 이벤트 기반 교체였지만 현재는 더 이상 사용되지 않습니다.

여전히 사용 중인 시스템에 어떻게든 실행하는 경우 SysVInit에 대해 위에서 언급한 것과 동일한 명령을 대부분 사용할 수 있습니다.


참고: 이것은 단순성 이해 위키의 (WIP) 주제에 대한 스냅샷입니다. 모든 제안(및 반응)을 환영합니다. 여기에서 최신 버전을 찾을 수 있습니다: Linux: Working With Daemons

좋은 웹페이지 즐겨찾기