依赖 init.d 脚本的新贵脚本?

Tro*_*roy 8 upstart

我有一个新贵脚本来启动自定义 nodejs 应用程序。该应用程序依赖于 couchdb 和 elasticsearch。couchdb 和 elasticsearch 提供用于启动/停止它们的 init.d 脚本。是否可以告诉我的新贵脚本 couchdb 和 elasticsearch 是依赖项?我在我的新贵脚本中尝试过这个,但它似乎不起作用:

开始(启动 couchdb 并启动 elasticsearch)

谢谢!

der*_*ink 7

我有同样的问题,我也找到了不同的答案。作者列出了实现此目的的 4 个选项,其中最喜欢第一个:

使用initclt emit myservice-started信号的依赖服务的启动完成。在链接的答案中,建议将此行添加到依赖服务init.d脚本的末尾,但我更喜欢不同的方法。我喜欢创建一个inid.d名为myservice-started仅包含一个start部分的新脚本。在文件的标题中使用适当的注释样式,我声明它依赖于$myservice启动。在这一start节中,我告诉暴发户关于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
Run Code Online (Sandbox Code Playgroud)

您等待 myservice 的新贵脚本可以监听myservice-started事件:

start on myservice-started
Run Code Online (Sandbox Code Playgroud)


Rin*_*ind 3

我知道唯一可行的是为elasticsearch和couchdb创建(或搜索并安装)upstart脚本,这样你就可以使用“开始”选项。

couchdb 的 Upstart 脚本

# couchdb v1.2.0
#
# CouchDB的自定义安装

描述“CouchDB v1.2.0,本地”
控制台输出

# 在所有文件系统和网络接口可用后启动
启动(本地文件系统和网络设备 IFACE!=lo)
在运行级别停止 [!2345]

# 设置工作目录
env COUCHDB_WD="/path/to/build-couchdb/build/bin"
导出 COUCHDB_WD

# erlang 需要
env HOME =“/ home /用户”
出口首页

脚本
  # 修改 PATH 以首先访问本地 couchdb 的工作目录
  路径=“$COUCHDB_WD:$路径”
  #export PATH # 脚本块内不需要
  #logger -t $0 "HOME='$HOME'"
  #logger -t $0 "PATH='$PATH'"
  # 将 couchdb 日志输出到自定义位置
  #exec >>/h​​ome/user/couchdb_local.log 2>&1
  执行couchdb
结束脚本

Elasticsearch 的新贵

# ElasticSearch 服务

描述“弹性搜索”

开始于(网络设备启动
          和本地文件系统
          和运行级别 [2345])

在运行级别停止[016]

重生限制 10 5

env ES_HOME=/usr/share/elasticsearch/home
环境 ES_MIN_MEM=256m
环境 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
  菲

  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_DIR -Des.path.work=$WORK_DIR"elasticsearch
结束脚本