依赖于init.d脚本的新贵脚本?


8

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

开始(启动couchdb和elasticsearch)

谢谢!



我试过了:在已启动的RC RUNLEVEL = [2345]上启动,但没有帮助。我的应用启动时,Elasticsearch尚未启动。因此,看来我的暴发户脚本没有办法知道由初始化脚本启动的服务是否已经启动?
Troy

好吧,我知道唯一可行的方法是为elasticsearch和couchdb创建(或搜索并安装)新贵脚本,以便可以使用“ start on”选项。
Rinzwind

看看这个答案是否有帮助!我找到了两个:D未经测试的代码的新贵脚本,因此您可能需要根据情况进行调整。
Rinzwind

Answers:


3

我唯一知道的可行方法是为elasticsearch和couchdb创建(或搜索并安装)新贵脚本,以便可以使用“ start on”选项。

CouchDB的新贵脚本

#ouchdb 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 / user”
出口首页

脚本
  #修改PATH以首先访问本地benchdb的工作目录
  PATH =“ $ COUCHDB_WD:$ PATH”
  #export PATH#脚本块中不必要
  #logger -t $ 0“ HOME ='$ HOME'”
  #logger -t $ 0“ PATH ='$ PATH'”
  #输出ouchdb日志到自定义位置
  #exec >> / home / user / couchdb_local.log 2>&1
  执行长沙发
结束脚本

Elasticsearch的新贵

#ElasticSearch服务

描述“ ElasticSearch”

开始(网络设备启动
          和本地文件系统
          和运行级别[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 = /数据/ elasticsearch /数据
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 = $ DATA_DIR -Des.path.work = $ WORK_DIR“ elasticsearch
结束脚本

我最终只是创建了一个init.d脚本。谢谢您的帮助。
Troy

我认为您是正确的...由于时间紧迫,我现在刚刚创建了init.d脚本作为临时帮助。
Troy

那也将起作用,但是是一种回归;)由于12.10支持新贵,我希望新贵是更好的选择。但是,如果您使用它与init脚本一起工作,那就去吧;)
Rinzwind

7

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

用于initclt emit myservice-started表示您的从属服务启动完成。在链接的答案中,建议将此行添加到依赖项服务init.d脚本的末尾,但是我更喜欢另一种方法。我喜欢创建一个仅包含一部分的新inid.d脚本。使用文件头中的适当注释样式,我声明它取决于要启动。在这一部分中,我将告诉新手如何开始。您可以使用安装它。myservice-startedstart$myservicestartmyserviceupdate-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

等待myservice的新贵脚本可以侦听该myservice-started事件:

start on myservice-started
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.