我使用福尔曼在生产服务器(ubuntu 12)上运行node.js应用程序。Foreman有一个很好的工具来为暴发户创建脚本。
问题是,当我重新启动服务器时,我的应用程序(由领班管理)会在redis-server之前启动,为了等待有效的连接,我必须构建一些技巧。
理想的解决方案是更早地启动redis-server,并在节点应用程序启动时启动该应用程序。
引导配置:
我的问题是:如何更改我的节点应用程序的启动顺序?我想在我的应用程序启动之前等待redis-server,但是当我这样做时,它不会启动:
start on (started redis-server)我猜想这是因为没有事件从init.d脚本发送到新启动,但也许有一种方式我不知道?
提前感谢您的帮助!
发布于 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。
发布于 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脚本有类似的内容(简化为保留多汁的内容):
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的诀窍似乎非常有用。
https://stackoverflow.com/questions/15064208
复制相似问题