У меня есть скрипт для запуска пользовательского приложения nodejs. Приложение зависит от couchdb иasticsearch. couchdb иasticsearch предоставляют сценарии init.d для их запуска / остановки. Можно ли сказать моему сценарию выскочки, что couchdb иasticsearch являются зависимостями? Я попробовал это в своем сценарии выскочки, но он, похоже, не работает:
начать (запустил couchdb и запустил эластичный поиск)
Спасибо!
Единственная вещь я знаю это, работала бы, должен создать (или поиск и установка) новомодные сценарии и для 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
У меня был тот же вопрос, и я также нашел другой ответ . Автор перечисляет 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