我有一个 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 >>/home/user/couchdb_local.log 2>&1 执行couchdb 结束脚本
- 将环境编辑为您所需要的;
- 来源:https://stackoverflow.com/questions/11980900/how-to-get-custom-couchdb-to-run-as-upstart-job
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 结束脚本
- 来源:https://gist.github.com/rbscott/1052015
- 将环境目录更改为您需要的目录。