我使用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启动并附加到可执行文件而不是脚本文件?
答案 0 :(得分:1)
如你所知;
PM2是Node.js / io.js应用程序的生产流程管理器 内置负载均衡器。它允许您保留应用程序 永远活着,在没有停机的情况下重新加载它们并提供便利 常见的系统管理任务。
因此它无法附加可执行文件或守护程序实用程序。但是在PM2上附加bash脚本文件是一件非常方便的事情。在我看来,如果停止它关闭bash进程,mongo守护进程仍将生活在你遇到的这种情况下。因此,您可以捕获bash脚本退出情况,并在停止捕获退出情况的pm2进程时,您将能够调用mongod --shutdown
命令。
或另一个解决方案创建start
和stop
脚本,并在这些bash脚本中运行和停止守护程序实用程序,如mongodb。
额外的解决方案是 Docker?