0

当我尝试使用 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,例如看这里这里,但是这两篇文章都离解决我的问题太远了。

当我尝试手动运行此命令时,它工作得很好,非常快并且符合预期,但是如果我尝试使用 运行它at,让我们说

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

问题重现。也挂了...

如何解决这个问题?

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

4

1 回答 1

0

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

我在PM2 Github 存储库上打开了一个问题,但在解决之前,你最好的选择可能是使用类似forever的东西,而不是使用 -w 和 --watchIgnore 标志。

这个 SO 答案讨论了如何设置监视进程并永远忽略某些文件。

e:看起来这个问题是 PM2 开发人员在 2016 年底通过重构启动系统修复的。

于 2015-05-02T15:14:17.927 回答