首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新贵和init.d优先

新贵和init.d优先
EN

Stack Overflow用户
提问于 2013-02-25 09:52:55
回答 2查看 1.4K关注 0票数 3

我使用福尔曼在生产服务器(ubuntu 12)上运行node.js应用程序。Foreman有一个很好的工具来为暴发户创建脚本。

问题是,当我重新启动服务器时,我的应用程序(由领班管理)会在redis-server之前启动,为了等待有效的连接,我必须构建一些技巧。

理想的解决方案是更早地启动redis-server,并在节点应用程序启动时启动该应用程序。

引导配置:

  • redis-server由/etc/init.d/redis-server和is /etc/rc2.d/S20redis-server启动。
  • 我的节点应用程序是用/etc/init/stocks streamer*..conf文件启动的

我的问题是:如何更改我的节点应用程序的启动顺序?我想在我的应用程序启动之前等待redis-server,但是当我这样做时,它不会启动:

代码语言:javascript
复制
start on (started redis-server)

我猜想这是因为没有事件从init.d脚本发送到新启动,但也许有一种方式我不知道?

提前感谢您的帮助!

EN

回答 2

Stack Overflow用户

发布于 2013-02-25 10:00:56

也许你应该让工头启动redis,这样你就可以更好地控制应用程序的所有依赖项。

或者确保领班的启动时间比redis晚(确保foreman在/etc/rc2.d中的链接列在S20*之后。

还有一种选择:让redis服务器也由upstart启动,这可能会帮助upstart管理依赖项。

这里有关于如何做到这一点的解释:https://gist.github.com/bdotdub/714533

我建议使用"Start必须先于其他服务“(http://upstart.ubuntu.com/cookbook/#start-must-precede-another-service),以便在您启动自己的服务时开始使用redis。

票数 1
EN

Stack Overflow用户

发布于 2017-02-16 22:08:56

由于这个问题没有被接受的答案,而且考虑到我在这里也有同样的问题,我想我会提供另一个解决方案。这个问题可以重述如下:

我如何使一个刚起步的工作等待一个init.d脚本?

正如OP在问题中所述,启动init.d脚本时可以发出一个upstart事件。这样,新启动的作业可以有一个简单的start on started SCRIPT_NAME声明。

在我的例子中,使用基于自定义CentOS的发行版,我的/etc/rc.d/rc负责执行sysvinit (init.d)脚本。该脚本完全是新启动的,因此为每个启动/停止的sysvinit脚本都会发出upstart事件。

换句话说,/etc/rc.d/rc脚本有类似的内容(简化为保留多汁的内容):

代码语言:javascript
复制
for i in /etc/rc$runlevel.d/S* ; do
    subsys=${i#/etc/rc$runlevel.d/S??}
    initctl emit --quiet starting JOB=$subsys
    $i start
    initctl emit --quiet started JOB=$subsys
done

我想您需要查看一下脚本,并在您认为合适的地方添加事件发射。就我而言,排放物已经存在了。

您可以在一个新建作业中等待多个事件。关于如何找出哪些事件可用(我还没有找到更好的文档来诚实地说),请参阅问题。

特别是,对grep -r emit的诀窍似乎非常有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15064208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档