데비안의 서비스는 어떻게 작동하며 어떻게 관리 할 수 ​​있습니까?


79

Windows에는 Windows를 통해 시작할 수있는 모든 시스템 서비스를 볼 수있는 서비스 관리자가 있으며 사용하는 사용자를 설정하고 권한 관리가 있으며 서비스에 변수 및 기타 정보를 전달할 수 있습니다. , 나는 그것들의 이름을 지정할 수 있고, 하나의 프로그램 등의 복제 서비스를 만들 수 있습니다. 그래서 Windows에는 기본 관리 도구가 있습니다.

Linux에서 어떻게 똑같이 할 수 있습니까? 시작시 "svnserve"를 실행하도록 트리거하는 방법 또는 특수 컨텍스트에서 실행되도록 서비스를 구성하는 방법 "프로그램 된"서비스를 모두 보려면 어떻게해야합니까?


9
어떤 배포판과 버전을 사용하고 있습니까? 서비스 관리 (서비스는 유닉스 세계에서 거의 항상 '데몬'이라고 불림)는 쉽고 준 표준이었습니다. 요즘에는 상황이 더 다양합니다. 항상 좋은 것은 아닙니다. :) 또한 컨텍스트 란 무엇입니까?
Alexios

systemd가 init 시스템 전쟁에서 천천히이기는 것 같습니다. 데비안은 여전히 ​​오래된 SysVinit를 사용하는 마지막 대규모 보유자이며 현재 어떤 init 시스템을 사용할지 결정하는 중입니다.
Patrick

1
현재 데비안 (최신 안정)으로 작업하고 있으며 문맥 상 경로 변수 또는 지정된 사용자 컨텍스트를 의미합니다.
Erdinc Ay

1
server데비안 에서만 명령 을 사용해야하는 경우 unix.stackexchange.com/q/226089/130402
Peter Krauss

답변:


124

리눅스는 현재 3 가지 주요 초기화 시스템을 사용하고 있습니다. 몇 년 전만해도 SysVinit가있었습니다. 그러나 SysVinit는 서비스 종속성 그래프와 같은 기능이 심각하게 부족하여 지금까지 대부분의 배포에서 더 이상 사용되지 않습니다. 현재 대부분의 배포판은 systemd 로 전환하고 있습니다. 하지만도있다 신출내기 .

그러나 다음은 세 가지 init 시스템 각각에 대한 귀하의 질문에 대한 답변입니다.

 

SysVinit

SysVinit는 현재 데비안과 RedHat에서 사용합니다. RedHat (7)의 다음 버전은 systemd를 사용합니다.

부팅시 SysVinit 서비스를 활성화하는 보편적 인 방법은 /etc/rc3.d(또는 /etc/rc2.d) 에서 심볼릭 링크하는 것입니다 . 모든 서비스는에서 찾을 수 있습니다 /etc/init.d. 그러나 배포판에는 종종 이러한 파일을 관리하기위한 자체 도구가 있으며 대신 해당 도구를 사용해야합니다. (페도 / 레드햇 보유 service하고 chkconfig우분투 가지고 update-rc.d)

서비스 나열 :

ls /etc/init.d/

서비스 시작 :

/etc/init.d/{SERVICENAME} start

또는

service {SERVICENAME} start

서비스 중지 :

/etc/init.d/{SERVICENAME} stop

또는

service {SERVICENAME} stop

서비스 활성화 :

cd /etc/rc3.d
ln -s ../init.d/{SERVICENAME} S95{SERVICENAME}

(이는 S95주문을 지정하는 데 사용됩니다. S01은 S02 이전에 시작됩니다)

서비스 비활성화 :

rm /etc/rc3.d/*{SERVICENAME}

 

체계화

systemd를 사용하는 가장 유명한 배포판은 Fedora입니다. 많은 사람들이 사용하지만. 또한 데비안은 upstart를 통해 systemd를 선택함으로써 대부분의 배포판에서 사실상 upstart 시스템이 될 것입니다 (ubuntu는 이미 systemd에 대한 upstart를 중단한다고 발표했습니다).

서비스 나열 :

systemctl list-unit-files

서비스 시작 :

systemctl start {SERVICENAME}

서비스 중지 :

systemctl stop {SERVICENAME}

서비스 활성화 :

systemctl enable {SERVICENAME}

서비스 비활성화 :

systemctl disable {SERVICENAME}

 

건방진 녀석

Upstart는 우분투 사람들에 의해 개발되었습니다. 그러나 데비안 이 systemd를 사용하기로 결정한 후 우분투 는 시작을 포기할 것이라고 발표했다 .

RHEL-6에는 RedHat이 Upstart를 간단히 사용했지만 일반적으로 사용하지는 않았습니다.

서비스 나열 :

initctl list

서비스 시작 :

initctl start {SERVICENAME}

서비스 중지 :

initctl stop {SERVICENAME}

서비스 활성화 :

불행히도 두 가지 방법 :

  1. /etc/default/{SERVICENAME}줄이 포함 된 파일 이 있습니다 ENABLED=.... 이 줄을로 변경하십시오 ENABLED=1.

  2. 파일이있을 것 /etc/init/{SERVICENAME}.override입니다. 포함 start하지 않았거나 완전히 포함되어 있지 않아야 manual합니다.

서비스 비활성화 :

echo manual > /etc/init/{SERVICENAME}.override

참고 : 젠투가 사용하는 'OpenRC'init 시스템도 있습니다. 현재 Gentoo는 그것을 사용하는 유일한 배포판이며, 다른 배포판에 의해 사용되거나 고려되지 않습니다. 따라서 사용법을 다루지 않습니다 (의견이 있다고 생각하더라도 추가 할 수 있습니다).


OpenRC는 SysVinit에 대한 추상화입니다. 대체하지 않고 추가합니다.
Spidey

대단한 글쓰기! 몇 가지 사소한 수정 사항 : RHEL 6.x (및 CentOS 6.x 및 기타 파생 상품)는 Ubuntu와 같이 시작을 사용합니다 (대부분의 서비스는 여전히 SysV 스크립트를 사용하지만). 또한 "chkconfig"(RH) 및 "update-rc.d"(Debian)는 rc? .d 디렉토리에 대한 링크를 추가하는 "공식적인"방법이라고 덧붙입니다.
rsuarez

RHEL6에 @rsuarez 좋은 지적. 많이 사용하지는 않지만. 대부분의 시스템은 여전히 ​​레거시 SysVinit (내 RHEL6 시스템 중 하나에서 17 upstart, 89 SysVinit)를 통해 실행됩니다. 그리고 chkconfig하고 update-rc.d언급된다. SysVinit 아래의 두 번째 단락 참조 :-)
Patrick

@Patrick은 # 1에 동의합니다. "죄송합니다!" # 2 :-)
rsuarez

1
포괄적 인 답변에 감사드립니다. 이제 큰 그림을 얻었습니다. 현재 나는 독일어를 사용하는 유럽에서 데비안 (최신 안정)을 사용하고 있습니다. 최고의 권장 사항이 있지만, 아마도 Redhat을 사용해 볼 것입니다.
Erdinc Ay

9

다른 배포판은 다른 메커니즘을 사용하여 서비스를 관리합니다. 서비스를 관리하는 소프트웨어는 init 로 불리며 , 다른 프로세스의 시작을 담당하는 첫 번째 프로세스 (프로세스 ID 1)의 전통적인 이름을 따릅니다.

데비안은 전통적인 SysVinit 변종 init를 사용합니다 . 이 시스템에서는 디렉토리에 스크립트 모음 /etc/init이 있습니다 (이 위치와 다른 위치는 SysVinit를 사용하는 배포판마다 약간 다를 수 있습니다). 이 스크립트는 직접 호출되지 않고 디렉토리의 기호 링크를 통해 호출됩니다 /etc/rc?.d. 서비스가 시작되는시기를 결정하는 것은 이러한 심볼릭 링크의 존재와 이름입니다. 자세한 내용 은 데비안 참조 서에서 init 장을 읽으십시오 .

/etc/rc?.d어떤 서비스가 이미 있는지 살펴보십시오 . 점 앞의 글자 나 숫자는 런레벨입니다. 이름이 시작하는 항목 은 런레벨에 들어갈 때 S인수로 실행되고 이름이 시작하는 start항목 K은 런레벨을 떠날 때 실행됩니다. 일반적인 런레벨 순서는 다음과 같습니다 : 부팅하는 동안 S ( /etc/rcS.d/S*실행)와 2 ( /etc/rc2.d/S*실행). 종료시 /etc/rc2.d/K*실행 된 후 런레벨이 0 (또는 재부팅의 경우 6)으로 전환됩니다.

간단히 말해서, 새 서비스에 대한 시작 스크립트를 작성하려는 경우 :

  • 에 쉘 스크립트를 작성하십시오 /etc/init.d. 이 스크립트는 하나 개가 될 수 있습니다 인수에 동의해야합니다 start, stop, force-reload, restart, 또는 (선택) reload또는 status. 차이 reloadrestartrestart동등 stop하였다 start동안은 reload(상기 서비스가 지원하는 경우) 것을 중지하지 않고 구성을 다시로드; force-reload수행 reload가능한 경우와 restart그렇지 않은 경우. 예를 들어 기존 파일과 데비안으로 부팅 할 때 스크립트 실행하기를 참조하십시오 .
  • update-rc.d서비스를 시작 및 중지 할 기호 링크를 작성하려면 실행하십시오 . 대부분의 서비스는 런레벨 2, 3, 4 및 5에서 실행됩니다.

svn 액세스를 제공하기 위해 Apache를 설정하고 HTTP 또는 HTTPS 프로토콜을 사용하는 것이 더 쉬울 수 있습니다. 이것은 웹 브라우저를 통해 빠른 리포지토리 브라우징을 허용한다는 부작용이 있습니다.


2

전통적인 유닉스 배경에서 서비스에는 특별한 것이 없습니다. 서비스는 처리 과정이지만 두 가지 예외가 있습니다. 터미널이 필요하지 않으며 부팅시 시작됩니다. 부팅시 시작 방법은 init (sysv init, bsd init, upstart, systemd 또는 기타 항목 일 수 있습니다. man 페이지에서 init를 확인하십시오)와 작업 또는 init 구성에 래퍼를 사용하는지 여부에 따라 다릅니다. 터미널에서 서비스를 실행하는 것을 막을 수는 없습니다. 실제로 테스트 목적으로 일반적입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.