Upstart скрипт, который зависит от скриптов init.d?

У меня есть скрипт для запуска пользовательского приложения nodejs. Приложение зависит от couchdb иasticsearch. couchdb иasticsearch предоставляют сценарии init.d для их запуска / остановки. Можно ли сказать моему сценарию выскочки, что couchdb иasticsearch являются зависимостями? Я попробовал это в своем сценарии выскочки, но он, похоже, не работает:

начать (запустил couchdb и запустил эластичный поиск)

Спасибо!

8
задан 12 April 2013 в 15:08

2 ответа

Единственная вещь я знаю это, работала бы, должен создать (или поиск и установка) новомодные сценарии и для elasticsearch и для couchdb, таким образом, можно использовать, "запускаются на" опции.

Новомодный сценарий для couchdb

# couchdb v1.2.0
#
# Custom installation of CouchDB

description     "CouchDB v1.2.0, local"
console output

# start after all filesystems & network interfae are available
start on (local-filesystems and net-device-up IFACE!=lo)
stop on runlevel [!2345]

# set working directory
env COUCHDB_WD="/path/to/build-couchdb/build/bin"
export COUCHDB_WD

# required for erlang
env HOME="/home/user"
export HOME

script
  # modify PATH to hit local couchdb's working directory first
  PATH="$COUCHDB_WD:$PATH"
  #export PATH # not necessary inside script block
  #logger -t $0 "HOME='$HOME'"
  #logger -t $0 "PATH='$PATH'"
  # output couchdb logs to custom location
  #exec >>/home/user/couchdb_local.log 2>&1
  exec couchdb
end script

Выскочка для elasticsearch

# ElasticSearch Service

description     "ElasticSearch"

start on (net-device-up
          and local-filesystems
          and runlevel [2345])

stop on runlevel [016]

respawn limit 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

console output

script
  if [ -f /etc/default/elasticsearch ]; then
    . /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
end script
3
ответ дан 12 April 2013 в 15:08

У меня был тот же вопрос, и я также нашел другой ответ . Автор перечисляет 4 варианта для достижения этой цели, из которых мне нравится первый из лучших:

Используйте initclt emit myservice-started, чтобы сообщить о завершении запуска зависимой службы. В связанном ответе предлагается добавить эту строку в конец скрипта службы зависимостей init.d, но я предпочитаю другой метод. Мне нравится создавать новый inid.d скрипт с именем myservice-started, который содержит только раздел start. Используя соответствующий стиль комментирования в заголовке файла, я заявляю, что он зависит от запуска $myservice. В разделе start я рассказываю upstart о запуске myservice. Вы можете установить его с помощью update-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

Ваш сценарий upstart, ожидающий myservice, может прослушивать событие myservice-started:

start on myservice-started
0
ответ дан 12 April 2013 в 15:08

Другие вопросы по тегам:

Похожие вопросы: