init.d 스크립트에 의존하는 시작 스크립트?


8

사용자 정의 nodejs 앱을 시작하는 시작 스크립트가 있습니다. 응용 프로그램은 couchdb 및 elasticsearch에 따라 다릅니다. couchdb 및 elasticsearch는 init.d 스크립트를 제공하여 시작 / 중지합니다. couchdb와 elasticsearch가 종속성이라는 것을 upstart 스크립트에 알리는 것이 가능합니까? 내 시작 스크립트에서 이것을 시도했지만 작동하지 않는 것 같습니다.

시작 (couchdb 시작 및 elasticsearch 시작)

감사!



나는 이것을 시도했다 : 시작된 시작 rc RUNLEVEL = [2345]하지만 도움이되지 않습니다. 앱이 시작될 때 Elasticsearch가 시작되지 않았습니다. 따라서 시작 스크립트가 init 스크립트로 시작한 서비스가 이미 시작되었는지 알 수있는 방법이없는 것 같습니다.
Troy

내가 알 수있는 유일한 것은 "search on"옵션을 사용할 수 있도록 elasticsearch와 couchdb에 대한 upstart 스크립트를 작성 (또는 검색 및 설치)하는 것입니다.
Rinzwind

이 답변이 도움이되는지 확인하십시오! 테스트되지 않은 코드 모두에 대한 시작 스크립트를 찾았으므로 상황에 맞게 조정해야 할 수도 있습니다.
Rinzwind

답변:


3

내가 알 수있는 유일한 방법은 elasticsearch와 couchdb에 대한 시작 스크립트를 작성 (또는 검색 및 설치)하여 "start on"옵션을 사용할 수 있다는 것입니다.

couchdb의 시작 스크립트

# couchdb v1.2.0
#
# CouchDB의 커스텀 설치

설명 "CouchDB v1.2.0, 로컬"
콘솔 출력

# 모든 파일 시스템 및 네트워크 인터페이스를 사용할 수있게 된 후 시작
시작 (로컬 파일 시스템 및 net-device-up IFACE! = lo)
런레벨에서 멈춤 [! 2345]

# 작업 디렉토리 설정
env COUCHDB_WD = "/ path / to / build-couchdb / build / bin"
COUCHDB_WD 내보내기

얼랭에 필요한 #
env HOME = "/ home / user"
수출 HOME

스크립트
  # 로컬 couchdb의 작업 디렉토리에 먼저 닿도록 PATH 수정
  PATH = "$ COUCHDB_WD : $ PATH"
  #export PATH # 스크립트 블록 안에 필요하지 않습니다
  #logger -t $ 0 "HOME = '$ HOME'"
  #logger -t $ 0 "PATH = '$ PATH'"
  # 사용자 정의 위치에 출력 couchdb 로그
  #exec >> / home / user / couchdb_local.log 2> & 1
  exec couchdb
엔드 스크립트

탄력적 검색을위한 시작

# ElasticSearch 서비스

설명 "ElasticSearch"

시작 (net-device-up)
          로컬 파일 시스템
          및 런레벨 [2345])

런레벨에서 정지 [016]

리스폰 제한 10 5

env ES_HOME = / usr / share / elasticsearch / home
env ES_MIN_MEM = 256m
env ES_MAX_MEM = 2g
env DAEMON = "$ {ES_HOME} / bin / elasticsearch"
env DATA_DIR = / data / elasticsearch / data
env CONFIG_DIR = / etc / elasticsearch

콘솔 출력

스크립트
  만약 [-f / etc / default / elasticsearch]; 그때
    . / etc / default / elasticsearch
  fi

  su -s / bin / dash -c "/ usr / bin / elasticsearch -f -Des.path.conf = $ CONFIG_DIR -Des.path.home = $ ES_HOME -Des.path.logs = $ LOG_DIR -Des.path. data = $ DATA_DIR -Des.path.work = $ WORK_DIR "elasticsearch
엔드 스크립트

대신 init.d 스크립트를 작성했습니다. 그래도 도움을 주셔서 감사합니다.
Troy

나는 당신이 맞다고 생각합니다 ... 시간 제한 때문에 지금은 init.d 스크립트를 반창고로 만들었습니다.
Troy

그것은 작동하지만 회귀입니다.) 12.10은 upstart를 선호하기 때문에 upstart가 더 나은 옵션이 될 것으로 기대했습니다. 그러나 init 스크립트로 작업했다면 그것을
찾으

7

나는 같은 질문을했고 다른 대답을 찾았습니다 . 저자 목록 4 옵션은이를 달성하기 위해 그 중 내가 가장 처음처럼 :

initclt emit myservice-started종속 서비스 시작이 완료되었음을 알리는 데 사용하십시오 . 링크 된 답변에서 종속성 서비스 init.d스크립트 의 끝에이 줄을 추가 하는 것이 좋지만 다른 방법을 선호합니다. 섹션 만 포함 된 새 inid.d스크립트 를 작성하고 싶습니다 . 파일 헤더에 적절한 주석 스타일을 사용하여 시작 에 따라 다릅니다 . 이 섹션 에서는 시작 에 대해 upstart를 알려줍니다 . 로 설치할 수 있습니다 .myservice-startedstart$myservicestartmyserviceupdate-rc.d

나는이 솔루션이 방해가되지 않기 때문에 좋아한다. 업데이트가 기존 init.d스크립트를 변경해도 이러한 추가 스크립트에는 영향을 미치지 않습니다. 하지만 당신의 신출내기 스크립트에 대한 변경이 기억 되는 이 필요합니다.

다음과 같이 보일 수 있습니다 :

#!/bin/sh -e

### BEGIN INIT INFO
# Provides:          myservice-started
# Required-Start:    $myservice
# Default-Start:     2 3 4 5
# Short-Description: send upstart signal after starting myservice
# Description:       myservice needs to run before some upstart services can run
### END INIT INFO

. /lib/lsb/init-functions

case "$1" in
    start)
        log_daemon_msg "Signaling myservice started..." "myservice-started"
        initctl emit myservice-started --no-wait
    ;;

    *)
        log_action_msg "Usage: /etc/init.d/myservice-started start"
        exit 1
    ;;
esac

exit 0

myservice를 기다리는 upstart 스크립트는 다음 myservice-started이벤트를 수신 할 수 있습니다 .

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