依赖于 init.d 脚本的 Upstart 脚本?

依赖于 init.d 脚本的 Upstart 脚本?

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

启动(启动couchdb和elasticsearch)

谢谢!

答案1

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

用于initclt emit myservice-started表示依赖服务启动完成。在链接的答案中,建议将此行添加到依赖服务init.d脚本的末尾,但我更喜欢另一种方法。我喜欢创建一个inid.d名为 的新脚本myservice-started,该脚本仅包含一个start部分。在文件标题中使用适当的注释样式,我声明它依赖于$myservice要启动的。在start部分中,我告诉 upstartmyservice已启动。您可以使用 来安装它update-rc.d

我喜欢这个解决方案,因为它不具有侵入性;如果更新更改了任何现有init.d脚本,它不会影响这些附加脚本。但请记住,对 upstart 脚本的更改必需的。

它可能看起来像这样:

#!/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

答案2

我知道唯一可行的方法是创建(或搜索并安装)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 所需
环境 HOME="/home/user"
出口首页

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

elasticsearch 的 Upstart

# 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"
环境 DATA_DIR=/data/elasticsearch/data
环境 CONFIG_DIR=/etc/elasticsearch

控制台输出

脚本
  如果 [ -f /etc/default/elasticsearch ]; 那么
    ./etc/默认/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=$DATA_DIR -Des.path.work=$WORK_DIR" elasticsearch
结束脚本

相关内容