/etc/init.d에서 사용하기에 완벽하게 좋은 스크립트가 있습니다. 실제로 Tanuki Java Service Wrapper로 만든 많은 것들이 있습니다.
그러한 쉘 스크립트를 시작 스크립트로 감싸는 간단한 템플릿이있을 수 있지만 약간의 인터넷 검색은 공개하지 않습니다.
뭔가 빠졌습니까?
/etc/init.d에서 사용하기에 완벽하게 좋은 스크립트가 있습니다. 실제로 Tanuki Java Service Wrapper로 만든 많은 것들이 있습니다.
그러한 쉘 스크립트를 시작 스크립트로 감싸는 간단한 템플릿이있을 수 있지만 약간의 인터넷 검색은 공개하지 않습니다.
뭔가 빠졌습니까?
답변:
이것에 대한 템플릿을 본 것이 기억 나지 않습니다. 그러나 기술적으로는 역 호환성 작업 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
따라서 시작 작업의 한 지점은 작성하기 간단해야합니다.
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)
합니다.
Upstart는에서 SysV 스타일 init 스크립트와 역 호환성을 유지한다고 생각했습니다 /etc/init.d
. init 스크립트를 그대로 사용할 수 있습니다.
/etc/init.d/myservice start
로 /etc/rc.local
올바른 순서. 이렇게하면 Upstart init 스크립트에 의해 시작된 서비스를 포함한 다른 모든 서비스 후에 서비스가 마지막에 시작됩니다.