依赖于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