使用PM2运行完整的开发环境

时间:2015-08-27 13:07:02

标签: node.js bash mongodb pm2

我使用PM2运行我的Node微服务,在开发中我还想启动MongoDB,以便我可以通过一个命令启动并运行开发。我有一个开发的ecosystem.js文件,看起来像这样:

apps: [
        {
            name: 'API',
            script: 'index.js',
            out_file: './logs/api.stdout.log',
            error_file: './logs/api.stderr.log'
        },
        {
            name: 'Emailer',
            script: 'services/emailer/index.js',
            out_file: './logs/emailer.stdout.log',
            error_file: './logs/emailer.stderr.log'
        },
        {
            name: 'MongoDB',
            script: 'services/development/mongodb.sh'
        }
    ]

mongodb.sh看起来像这样:

#!/bin/bash
mongod

当我启动PM2时,一切运行正常。当我调用pm2 stop all时,它会终止节点进程,但不会杀死MongoDB。

我猜这是因为它附加到bash实例,而不是mongod实例。有没有办法让PM2启动并附加到可执行文件而不是脚本文件?

1 个答案:

答案 0 :(得分:1)

如你所知;

  

PM2是Node.js / io.js应用程序的生产流程管理器   内置负载均衡器。它允许您保留应用程序   永远活着,在没有停机的情况下重新加载它们并提供便利   常见的系统管理任务。

因此它无法附加可执行文件或守护程序实用程序。但是在PM2上附加bash脚本文件是一件非常方便的事情。在我看来,如果停止它关闭bash进程,mongo守护进程仍将生活在你遇到的这种情况下。因此,您可以捕获bash脚本退出情况,并在停止捕获退出情况的pm2进程时,您将能够调用mongod --shutdown命令。

或另一个解决方案创建startstop脚本,并在这些bash脚本中运行和停止守护程序实用程序,如mongodb。

额外的解决方案是 Docker?