2013-02-25 6 views
3

나는 프로덕션 서버 (우분투 서버 12)에서 node.js 응용 프로그램을 실행하기 위해 foreman을 사용합니다. Foreman은 신출내기를위한 스크립트를 만드는 훌륭한 도구를 가지고 있습니다.Upstart와 init.d priority

문제는 서버를 재부팅 할 때 redony-server 이전에 내 응용 프로그램 (foreman이 관리)을 실행하고 유효한 연결을 기다리기 위해 몇 가지 트릭을 작성했기 때문입니다.

이상적인 해결책은 이전에 redis-server를 시작하고 모두 시작될 때 노드 응용 프로그램을 시작하는 것입니다.

부팅 구성 :

  • 레디 스 서버가 /etc/init.d/redis-server에 의해 시작하고 있습니다 /etc/rc2.d/S20redis-server
  • 내 노드 응용 프로그램이 시작됩니다
  • /etc/init/stocks-streamer.conf 파일

제 질문은 : 노드 응용 프로그램의 부팅 순서를 어떻게 변경하겠습니까? 나는 내 응용 프로그램이 시작되기 전에 레디 스 서버 대기하고 싶지만 나는이 작업을 수행 할 때, 그것은 시작되지 않습니다

start on (started redis-server) 

내가 어떤 이벤트가 아마 벼락 출세 만에있는 init.d 스크립트에서 전송되지 않기 때문에 그것의 상상 내가 모르는 방법이 있니?

도움을 주셔서 감사합니다.

답변

1

아마 당신은 당신이 당신의 앱의 모든 의존성을 더 잘 제어 할 수 있도록 감독이 대신 시작해야 할 것입니다.

또는 확인 감독은 레디 스가 (의 /etc/rc2.d에서 확인 감독의 링크를 만들 * S20보다 뒷부분에 나와있는 것보다 훨씬 나중에 시작하게

또 하나의 대안 :. 레디 스 서버도 신출내기 시작할 수있다,이 . 가능성이 종속성을 관리 신출내기 도움이 될 것입니다

여기에이 작업을 수행하는 방법에 대한 설명이 있습니다 https://gist.github.com/bdotdub/714533

은 내가 대신 (http://upstart.ubuntu.com/cookbook/#start-must-precede-another-service) "을 시작 다른 서비스를 선행해야"사용하는 것이 좋습니다 그래서 레디 스 때 시작됩니다 너는 너의 자신의 서비스를 시작한다.

+0

문제는 내가 /etc/rc2.d에 upstart 스크립트의 흔적이 없다는 것입니다. Upstart는 이벤트를 사용하여 스크립트를 시작하고 중지합니다. redis-server 스크립트에서 이벤트를 방출해야한다고 생각합니다. 그러나 어떻게 수행하는지 찾지 못했습니다. –

+0

대신에 신생음을 사용하여 redis를 실행하라는 답변을 업데이트했습니다. upstart가 모든 종속성을 관리하는 경우'start on'이 예상대로 작동해야합니다. –

0

이 질문에는 대답이 없으므로 여기에 같은 문제가 있었으므로 다른 해결책을 제시 할 것이라고 생각했습니다. 질문은 다음과 같이 다시 설명 할 수 있습니다.

init.d 스크립트에서 upstart 작업 대기를 어떻게 만듭니 까?

질문에서 OP.d라고 말하면 init.d 스크립트가 시작될 때 upstart 이벤트를 발생시킬 수 있습니다. 이런 식으로, 신출내기 직업은 간단한 start on started SCRIPT_NAME 선언을 가질 수 있습니다.

필자의 경우 CentOS 기반 사용자 정의 배포판을 사용하는 경우 /etc/rc.d/rc이 sysvinit (init.d) 스크립트를 실행합니다. 이 스크립트는 완전히 신생 시작을 인식하므로 시작/중지 된 각 sysvinit 스크립트에 대해 새로운 시작 이벤트를 방출합니다.

for i in /etc/rc$runlevel.d/S* ; do 
    subsys=${i#/etc/rc$runlevel.d/S??} 
    initctl emit --quiet starting JOB=$subsys 
    $i start 
    initctl emit --quiet started JOB=$subsys 
done 

난 당신이 당신이 생각하는 이벤트 방출을 스크립트를 살펴보고 추가 할 필요가 상상 : 즉

/etc/rc.d/rc 스크립트 (육즙이 물건을두고 간체) 같은 것을 가지고 그것은 적합합니다. 저의 경우, 방출은 이미있었습니다.

신생 시작 작업에서 여러 이벤트가 발생할 때까지 기다릴 수 있습니다. 사용할 수있는 이벤트를 찾는 방법에 대해 this 질문을 참조하십시오. 정직한 문서를 찾지 못했습니다.

특히 트릭을 grep -r emit로하는 것이 매우 유용합니다.