依赖于init.d脚本的Upstart脚本?
我有一个upstart脚本来启动自定义nodejs应用程序。 该应用程序依赖于couchdb和elasticsearch。 couchdb和elasticsearch提供init.d脚本来启动/停止它们。 是否有可能告诉我的upstart脚本couchdb和elasticsearch是依赖项? 我在我的upstart脚本中尝试了这个,但它似乎不起作用:
开始(启动couchdb并启动elasticsearch)
谢谢!
我知道唯一可行的方法是为elasticsearch和couchdb创建(或搜索并安装)upstart脚本,以便您可以使用“start on”选项。
couchdb的Upstart脚本
#couchdb v1.2.0 # #CanchDB的自定义安装 描述“CouchDB v1.2.0,local” 控制台输出 #在所有文件系统和网络接口可用后启动 开始(local-filesystems和net-device-up IFACE!= lo) 停在运行级别[!2345] #set working directory env COUCHDB_WD =“/ path / to / build-couchdb / build / bin” export COUCHDB_WD #ellang是必需的 env HOME =“/ home / user” 出口HOME 脚本 #define PATH首先命中本地couchdb的工作目录 PATH = “$ COUCHDB_WD:$ PATH” #export PATH#在脚本块中没有必要 #logger -t $ 0“HOME ='$ HOME'” #logger -t $ 0“PATH ='$ PATH'” #output couchdb记录到自定义位置 #exec >> / home / user / couchdb_local.log 2>&1 exec couchdb 结束脚本
- 编辑环境以满足您的需求;
- 资料来源: https : //stackoverflow.com/questions/11980900/how-to-get-custom-couchdb-to-run-as-upstart-job
用于弹性搜索的新贵
#ElasticSearch服务 描述“ElasticSearch” 开始(net-device-up 和本地文件系统 和运行级别[2345]) 在运行级别停止[016] 重生限制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 控制台输出 脚本 if [-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
- 将env dir更改为您需要的内容。
我有同样的问题,我也找到了不同的答案 。 作者列出了4个完成此任务的选项,其中我最喜欢第一个:
使用initclt emit myservice-started
来表示你的依赖服务的启动完成。 在链接的答案中,建议将此行添加到依赖服务的init.d
脚本的末尾,但我更喜欢不同的方法。 我想创建一个名为myservice-started
的新inid.d
脚本,它只包含一个start
部分。 在文件头中使用适当的注释样式,我声明它依赖于$myservice
来启动。 在start
部分,我告诉upstart有关myservice
的启动。 您可以使用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