Forever.js启动并重新启动多个脚本

Pic*_*els 5 deployment node.js

我的网络应用程序有3个主要的node.js组件:网站,订阅源和作业.

要开始这些我永远使用:

//forever.js

var forever = require('forever');

function start(name){

  forever.start( ['coffee', name + '.coffee'], { /* log options */ } )

};

start('website');
start('feeds');
start('jobs');
Run Code Online (Sandbox Code Playgroud)

我首先注意到的是,如果我运行脚本,它不会作为守护进程运行它.(这很可能正常)

node forever.js
Run Code Online (Sandbox Code Playgroud)

所以我接下来要做的就是永远运行forever.js脚本.我不确定这是否正确,还有一个forever.startDaemon所以不确定我应该使用哪一个.

forever start forever.js
Run Code Online (Sandbox Code Playgroud)

这有效,但问题是我想在发布我的应用程序的新版本时重新启动所有进程.我正在使用git的post-receive hook来第一次运行forever.js,但如果我在每次post-receive上执行此操作,它每次只会生成3个进程.

所以我想如果它们已经运行,我需要一种重启3个进程的方法.我想用forever.list做这个,但文档只说:

forever.list (format, callback)

Returns a list of metadata objects about each process that is being run using 
forever. This method is synchronous and will return the list of metadata as such.
Only processes which have invoked forever.startServer() will be available from
forever.list()
Run Code Online (Sandbox Code Playgroud)

首先,我不确定格式是什么意思,第二,它期望回调,但后来它说它是同步的.这有点令人困惑,我不知道如何使用列表.

最后,我想要做的是在git的post-receive钩子上启动/重启3个node.js进程.

FGR*_*eau 12

我认为最好的方法是:

forever start website.js
forever start feeds.js
forever start jobs.js
Run Code Online (Sandbox Code Playgroud)

然后在你的git post-receive hook中:

forever restart website.js
forever restart feeds.js
forever restart jobs.js
Run Code Online (Sandbox Code Playgroud)

将这些节点进程包装在单个进程中并不是一个好主意.我现在亲自使用Supervisord而不是永远(supervisord比永远恕我直言更稳定和强大).


fla*_*oze 5

我这样做:

#!/bin/sh

# Make sure we're in the right place
DIR=$(cd $(dirname "$0"); pwd)
cd $DIR
echo "[ I am $USER and I changed PWD to $DIR ]"

forever restart --spinSleepTime=2000 api_daemon.js || (forever start --spinSleepTime=2000 api_daemon.js && forever list)
Run Code Online (Sandbox Code Playgroud)

工作起来就像一个魅力,我从来没有使用 ./run.sh 得到重复的进程

要读取日志,我使用 tail -f /path/to/.log