我有一个新贵脚本来启动自定义 nodejs 应用程序。该应用程序依赖于 couchdb 和 elasticsearch。couchdb 和 elasticsearch 提供用于启动/停止它们的 init.d 脚本。是否可以告诉我的新贵脚本 couchdb 和 elasticsearch 是依赖项?我在我的新贵脚本中尝试过这个,但它似乎不起作用:
开始(启动 couchdb 并启动 elasticsearch)
谢谢!
我有同样的问题,我也找到了不同的答案。作者列出了实现此目的的 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)
我知道唯一可行的是为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 >>/home/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
结束脚本