태그 보관물: services

services

패키지 설치 중에 종속 서비스를 다시 시작하는 올바른 방법은 무엇입니까? 못했습니다. 누구든지

구성 패키지를 작성 중이며 구성이 영향을받는 서비스를 중지했다가 다시 시작하고 싶습니다. 지금 내가 사용하고 service [stop|restart]{pre,post}{inst,rm}방법. 나는 질문 어딘가에서 읽은 invoke-rc.d는 IS 바로 그것이 서비스에 대해 사용자 환경 설정을 존중하기 때문에, 방법. 그러나 이에 대한 지침을 찾지 못했습니다. 누구든지 그러한 지침을 알고 있습니까? 아니면 어떤 방법을 선택해야하는지 조언이 있습니까? 이 패키지는 내부 용으로 향후 2 년 동안 14.04 일 것입니다. 그러나 나는 내 후계자를 위해 가능한 한 깨끗한 상태를 유지하고 싶습니다 systemd. 내 마음도 마찬가지입니다.

로부터 invoke-rc.dman 페이지 :

데비안 패키지의 관리자 스크립트에 의한 init 스크립트에 대한 모든 액세스는 invoke-rc.d를 통해 이루어져야합니다 .

데비안 정책 매뉴얼 9 장 3.3 절 :

관리자는 update-rc.d 및 invoke-rc.d 프로그램에서 제공하는 추상화 계층을 사용하여 postinst, prerm 및 postrm과 같은 패키지 스크립트의 initscript를 처리해야합니다.

패키지 관리자 스크립트는 직접 호출하는 대신 invoke-rc.d를 사용하여 /etc/init.d/* 초기화 스크립트를 호출해야합니다.

데비안은 이미 사용 sysv-init중이며로 바로 systemd넘어갈 것입니다. 정책 매뉴얼은 시간이 지남에 따라 업데이트 될 것으로 생각합니다 systemctl. 그러나 내가 확실하지 않은 것은 이것입니다 : invoke-rc.d대신 사용해야합니까 service? dpkg트리거를 통해 일부 파일에 관심이 있다고 말할 수 있으므로 dpkg일부 서비스에 관심 dpkg이 있고 다시 시작 / 다시로드를 수행 할 수있는 방법이 있습니까?

명확히하기 위해 : 나는 init 스크립트를 작성하지 않습니다. Puppet, NTP 등과 같은 다른 응용 프로그램에 대한 구성을 가진 패키지를 제공하고 있으므로 스크립트에서 해당 서비스를 중지했다가 다시 시작합니다.

예를 들어 여기invoke-rc.dvs 에 대한 Docker 문제가 service있습니다. 한 사람, 아마도 관리자 인이 문제는 여전히 열려 있는데, 그들이 올바른 방법 으로이 일에 관심을 갖고 있다고 분명히 말하고 있습니다. (제 질문은 그 문제와 무관합니다.)



답변

나는 사전 / 사후 inst 스크립트를 계속 사용하고

preinst-이 스크립트는 패키지가 데비안 아카이브 ( “.deb”) 파일에서 압축 해제되기 전에 실행됩니다. 많은 ‘preinst’스크립트 는 설치 또는 업그레이드가 완료 될 때까지 ( ‘postinst’스크립트의 성공적인 실행에 따라) 업그레이드중인 패키지에 대한 서비스중지합니다 .

postinst-이 스크립트는 일반적으로 foo가 데비안 아카이브 ( “.deb”) 파일에서 압축 해제되면 패키지 foo의 필수 구성을 완료합니다. 종종 ‘postinst’스크립트는 사용자에게 입력을 요청하거나 사용자에게 기본값을 수락하면 상황에 따라 패키지를 다시 구성해야 함을 경고합니다. 그런 다음 많은 ‘postinst’스크립트 는 새 패키지가 설치되거나 업그레이드되면 서비스를 시작하거나 다시 시작하는 데 필요한 명령 을 실행합니다 .

참조 -https : //www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html

start | stop | restart를 호출하는 구문은 조건부로 작성됩니다. https://www.debian.org/doc/debian-policy/ch-opersys.html 섹션 9.3.3.2 initscripts 실행을 참조 하십시오.

만약 invoke-rc.d> / dev / null 2> & 1; 그때

invoke-rc.d 패키지

그밖에

/etc/init.d/package

fi

그래서 …

if which service >/dev/null 2>&1; then
        service package <action>
elif which invoke-rc.d >/dev/null 2>&1; then
        invoke-rc.d package <action>
else
        /etc/init.d/package <action>
fi

필요할 때 systemd에 다른 조건을 추가하십시오.)

따라서 서비스를 시작 / 중지하는 올바른 방법은 가능한 경우 적절한 래퍼 스크립트 (invoke-rc.d / system)를 사용하는 것이 아니라 init 스크립트 (/etc/init.d/package)를 호출하는 것입니다. 랩퍼를 사용할 수 없으면 /etc/init.d 스크립트로 돌아갑니다.