Forever.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'); 

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

 node forever.js 

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

 forever start forever.js 

这工作,但问题是,我想重新启动我的应用程序的新版本发布时的所有进程。 我使用git的post-receive hook来第一次运行forever.js,但是如果我在每个post-recieve上执行这个操作,它每次只会产生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() 

首先,我不确定格式是什么意思,其次它预计callback,但它说它的同步。 这是有点混乱,我不知道如何使用列表。

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

我认为最好的办法是:

 forever start website.js forever start feeds.js forever start jobs.js 

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

 forever restart website.js forever restart feeds.js forever restart jobs.js 

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

我这样做:

 #!/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.sh重复进程

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

是的,这是可能的。 您需要使用npm run forever命令来运行脚本。

添加到你的package.json

 "scripts": { "forever" : "forever start api/api-server.js && forever start www/www-server.js && forever start upload/upload-server.js && forever start static/static-server.js", "test": "echo \"Error: no test specified\" && exit 1" } 

你可以使用npm init来创buildpackage.json