【问题标题】:pm2 + EC2 instance + bootstrap script = hang?pm2 + EC2 实例 + 引导脚本 = 挂起?
【发布时间】:2018-02-17 00:11:29
【问题描述】:

当我尝试使用 pm2 启动 AWS EC2 实例时出现奇怪的问题

aws ec2 run-instances \
--count ${INSTANCE_COUNT} \
--image-id ${IMAGE_ID} \
--region ${REGION} \
--instance-type ${INSTANCE_TYPE} \
--iam-instance-profile Name=${IAM_ROLE} \
--security-group-ids ${SECURITY_GROUP} \
--key-name ${KEY_NAME} \
--subnet-id ${SUBNET_ID} \
--user-data ${BOOTSTRAP}

其中 ${BOOTSTRAP} 是我的文件BOOTSTRAP='file://ec2-bootstrap.sh' 的网址。

问题是它在尝试启动 pm2 守护程序时挂起以下行:

pm2 start ${SERVER_HOME}/index.js --ignore-watch="database node_modules" --watch -- -p80

发生这种情况后,处理器负载 100% 高,虚拟内存用完。

我能找到的唯一东西是关于从属实例 + stdin,例如看here或者here,但是这两篇文章都离解决我的问题太远了。

当我尝试手动运行此命令时,它运行得很好、非常快且符合预期,但如果我尝试使用 at 运行它,假设是

echo '<<the command here>> > ~/test.log' | at now + 1 min

问题已重现。它也挂了...

如何解决这个问题?

提前感谢您,任何帮助将不胜感激

【问题讨论】:

    标签: ubuntu amazon-ec2 pm2


    【解决方案1】:

    我花了一些时间在 CentOS 环境中解决这个问题,也在 AWS 上。我和你在同一个地方,最终无法解决。通过 AWS 开票并与支持代表合作,结果发现,据我所知,PM2 需要一个交互式终端会话来运行它的一些命令。

    我在PM2 Github repository 上打开了一个问题,但在解决之前,最好的办法是使用forever 之类的东西,而不是使用-w 和--watchIgnore 标志。

    This SO answer 讨论如何设置监视进程并永远忽略某些文件。

    e:看起来这是 PM2 开发人员在 2016 年底由refactoring the startup system 修复的。

    【讨论】:

    • 我在寻找解决问题的方法时偶然发现了这篇文章,似乎 pm2 不喜欢虚拟环境:我租了一个运行 Debian 的 VPS,当使用 pm2 运行某个节点时它完全冻结应用程序。邪恶且难以追踪的错误!我不会再使用它了。
    猜你喜欢
    • 2015-06-22
    • 2020-08-02
    • 1970-01-01
    • 2014-07-05
    • 2023-03-20
    • 2017-07-25
    • 1970-01-01
    • 2017-01-15
    • 2018-01-15
    相关资源
    最近更新 更多