init.dスクリプトに依存するUpstartスクリプト?


8

カスタムnodejsアプリを起動するためのupstartスクリプトがあります。アプリはcouchdbとelasticsearchに依存しています。couchdbとelasticsearchは、それらを開始/停止するためのinit.dスクリプトを提供します。私のアップスタートスクリプトにcouchdbとelasticsearchが依存関係であることを伝えることは可能ですか?私のアップスタートスクリプトでこれを試しましたが、うまくいかないようです:

開始(couchdbを開始し、elasticsearchを開始)

ありがとう!



私はこれを試しました:start on rc RUNLEVEL = [2345]で開始しますが、役に立ちません。アプリの起動時にElasticsearchが起動していませんでした。それで、私のupstartスクリプトがinitスクリプトによって開始されたサービスが既に開始されているかどうかを知る方法がないように見えますか?
トロイ

うまくいくと私が知っている唯一のことは、elasticsearchとcouchdbの両方のupstartスクリプトを作成(または検索してインストール)して、「start on」オプションを使用できるようにすることです。
Rinzwind 2013

この回答が役に立ったかどうかを確認してください!私は両方の:Dテストされていないコードのアップスタートスクリプトを見つけたので、状況に応じて調整する必要があるかもしれません。
Rinzwind 2013

回答:


3

機能することがわかっている唯一のことは、「start on」オプションを使用できるようにelasticsearchとcouchdbの両方のupstartスクリプトを作成(または検索してインストール)することです。

couchdbのUpstartスクリプト

#couchdb v1.2.0
#
#CouchDBのカスタムインストール

説明「CouchDB v1.2.0、ローカル」
コンソール出力

#すべてのファイルシステムとネットワークインターフェースが利用可能になった後で開始
開始(local-filesystemsおよび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サービス

説明「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

コンソール出力

脚本
  if [-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スクリプトを作成しただけです。あなたの助けをありがとう。
トロイ

私はあなたが正しいと思います...時間の制約のため、今はバンドエイドとしてinit.dスクリプトを作成しました。
Troy

それも機能しますが、退行です;)12.10以降はアップスタートを支持しているので、アップスタートがより良いオプションであると予想しました。しかし、もしあなたがそれを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.