[当我在PM2 v 3.5.0上本地运行我的应用程序时,一切正常,但是当我将其部署在Google GCP应用程序引擎Flex环境中时,PM2会继续重新启动该应用程序。
这是我的PM2配置文件
{
"apps": [{
"name" : "prod_client",
"script" : "./bin/www",
"exec_mode": "cluster_mode",
"instances": 1,
"watch" : false,
"env": {
"NODE_ENV": "production"
}
},{
"name" : "prod_api",
"script" : "./src/server/apiServer.js",
"exec_mode": "cluster_mode",
"instances": 1,
"watch" : false,
"env": {
"NODE_ENV": "production"
}
}]
}
有趣的是,我没有得到任何适当的有用日志。请注意,这里在本地计算机上一切正常,PM2不会抱怨。
我们有同样的问题。这是由于PM2试图将文件写入存储空间,而Google AppEngine(GAE)通常不支持该文件(有关更多内容,请参见后文)。另外,我们还没有完全正常运行它,因为可悲的是,GAE上的内存检查pidusage
命令存在一个尚未解决的问题[1]。
因此,为了最初解决该问题,我们使用该配置将日志记录和pidfile路径分别重定向到/dev/stdout
和/dev/null
。这使PM2正常工作,但仍然无法正常工作。例如,读取pidfile很麻烦。
但是,GAE确实允许使用tmp文件(我们使用的是Standard,但我想Flex具有类似的支持)[2]。因此,我们删除了pidfile配置,而是将start
脚本更改为PM2_HOME=/tmp/.pm2
。考虑到前面提到的pidusage
问题,这使我们尽可能地接近工作。
PM2_HOME=/tmp/.pm2 pm2 start ecosystem.config.js --env production --no-daemon --mini-list
ecosystem.config.js
配置类似于:
module.exports = {
apps: [
{
name: "service",
script: "main.js",
kill_timeout: 15000,
max_memory_restart: "400M",
exec_mode: "cluster",
instances: 1,
out_file: "/dev/stdout",
error_file: "/dev/stderr",
env: {
NODE_ENV: "development",
BLAH: "1",
},
env_production: {
NODE_ENV: "production",
BLAH: "0",
},
},
],
};