init.d 스크립트에 의존하는 시작 스크립트? 있습니다. 응용 프로그램은

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

시작 (couchdb 시작 및 elasticsearch 시작)

감사!



답변

내가 알 수있는 유일한 방법은 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
엔드 스크립트

답변

나는 같은 질문을했고 다른 대답을 찾았습니다 . 저자 목록 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


답변