【问题标题】:Using PM2 to run a complete development environment使用PM2运行完整的开发环境
【发布时间】:2015-11-21 21:17:22
【问题描述】:

我正在使用PM2 运行我的 Node 微服务,并且在开发过程中我还想启动 MongoDB,这样我就可以通过一个命令启动并运行开发。我有一个开发生态系统.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 启动并附加到可执行文件而不是脚本文件?

【问题讨论】:

    标签: node.js bash mongodb pm2


    【解决方案1】:

    如你所知;

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

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

    或者其他解决方案创建 startstop 脚本,并在这些 bash 脚本(如 mongodb)中运行和停止守护程序。

    额外的解决方案是Docker?

    【讨论】:

    • 这是个好主意。我的大脑被困在pm2 stop all 是我唯一调用的东西,它处理了所有事情,但出于某种原因,我完全没有意识到我可以制作一个在npm stop 上运行的脚本,手动退出 Mongo 致电pm2 stop all
    猜你喜欢
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 2016-07-05
    • 2019-06-23
    • 2022-01-11
    • 1970-01-01
    • 2017-03-26
    相关资源
    最近更新 更多