init.d에서 시작까지 브리지가 있습니까?


11

/etc/init.d에서 사용하기에 완벽하게 좋은 스크립트가 있습니다. 실제로 Tanuki Java Service Wrapper로 만든 많은 것들이 있습니다.

그러한 쉘 스크립트를 시작 스크립트로 감싸는 간단한 템플릿이있을 수 있지만 약간의 인터넷 검색은 공개하지 않습니다.

뭔가 빠졌습니까?

답변:


9

이것에 대한 템플릿을 본 것이 기억 나지 않습니다. 그러나 기술적으로는 역 호환성 작업 rc 및 rcS 덕분에 init.d 스크립트를 처음 시작하는 시작은 약간 아이러니합니다.

나는 당신이 시작 작업으로 가지고있는 것을 다시 쓰는 것을 고려할 것이지만, 일부 스크립트는 변환하기가 어렵다는 것을 알고 있습니다. 그래서 일부 스크립트에서 내가 한 일이 있습니다.

description "xyz"
author "xyz"
start on runlevel 5
stop on runlevel [!5]

pre-start script
    # do my work here to start the service
end script

post-stop script
    # do work here to stop the service
end script

이제 서비스의 특성에 따라 지속 또는 분기 여부에 관계없이 작업 파일 을 추가 expect fork하거나 추가해야 할 수도 task있습니다.

생각을 마치기 위해, 보통, 이것은 완전한 시작 작업 파일이 전부입니다. 모든 사전 시작 작업이 완료되고 모든 정리가 완료되며 남은 유일한 것은 일반적으로 다음과 함께 추가되는 서비스 자체입니다.

exec service_cmd

시작시 설명서에는 실행 수준 3, 4 및 5가 사용되지 않는다고 나와 있습니다. 따라서, 당신은 실행 레벨 2를 사용해야합니다.
djangofan

그것은 오래되었지만 5는 GUI가 시작된 상태에서 시스템이 작동한다고 확신합니다.
Joseph Rogers

6

따라서 시작 작업의 한 지점은 작성하기 간단해야합니다.

init.d 스크립트에는 반복적으로 반복되는 많은 쉘 스크립트 마술이 있습니다. 사례 설명, pidfile 추적, lsb 주석 행. GOOD init.d 스크립트를 읽지 않고 작성하는 방법은 명확하지 않습니다.

이미 모든 것을 작성하는 데 어려움을 겪었다면 다른 의견에서 언급했듯이 다른 시작 작업 / 이벤트에 의존하지 않는 한 시작 작업이 필요하지 않습니다.

그러나 실제로 신생 기업은 일을 정말 단순하게 만듭니다. tmpdirs, ulimits 또는 런타임 인수와 같은 항목을 설정하지 않으면 사전 시작이 필요하지 않습니다. 서비스 후 정리를하지 않으려면 사후 중지가 필요하지 않습니다 (정상 종료시 서비스가 실제로 정리되어야 함).

종종 많은 옵션을 가진 거대한 init.d 스크립트가 10-15 줄의 시작 작업으로 귀결됩니다. 가장 복잡한 init.d 스크립트는 대부분의 로직을 사전 시작에 덤프 할 수 있습니다. 핵심은 프로세스의 환경을 설정하기위한 코드의 작은 조각이며 시작 / 중지 / 부활 등을 처리하는 데 대한 논리는 아닙니다.

가장 어려운 부분과 사람들이 가장 자주 잘못하는 부분은 언제 일을 시작 / 중지해야 하는지를 아는 것입니다. start on runlevel [2345]논리적으로 보이지만 로컬 파일 시스템 마운트와 마찬가지로 해당 시점에서 네트워크가 병렬로 연결되어 있다는 사실은 무시합니다. 핵심은 실행하기 위해 필요한 최소한의 것 (기타 서비스, 파일 시스템, 네트워크 등)을 정확하게 파악하고 시작하는 것입니다. 대부분의 기존 네트워크 서비스가해야 start on (local-filesystems and net-device-up IFACE!=lo)합니다.


3

Upstart는에서 SysV 스타일 init 스크립트와 역 호환성을 유지한다고 생각했습니다 /etc/init.d. init 스크립트를 그대로 사용할 수 있습니다.


하지만 순서는 더 이상 예측하기 쉽지 않습니다. rc2.d / S99mything 스크립트가 실행되기 전 / 후에 시작 작업이 시작될 수 있습니다. 따라서 시작 관리 서비스에 의존하는 즉시 시작 작업이 필요합니다.
SpamapS

2
해킹으로, 당신은 특정 실행 레벨에서 init 스크립트를 제거 할 수 있습니다, 대신 같은 라인의 무리를 추가 /etc/init.d/myservice start/etc/rc.local올바른 순서. 이렇게하면 Upstart init 스크립트에 의해 시작된 서비스를 포함한 다른 모든 서비스 후에 서비스가 마지막에 시작됩니다.
Ryan C. Thompson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.