为什么 PM2 没有启动我的节点进程?
Why is PM2 not launching my Node process?
以前我成功实施了 PM2,但目前还没有。
我的节点应用程序 可以 运行 如果我手动启动它就好了,但我没有做任何事情通过 PM2 将它传送到 运行,即使 PM2 似乎 正在启动它。这就是我的意思:
如果我 运行 pm2 启动 server/index.js,终端中的响应为:
$ pm2 start server/index.js
[PM2] Spawning PM2 daemon with pm2_home=c:\pm2_system\.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting D:\Program Files\nodeApps\service-management-api\server\index.js in fork_mode (1 instance)
[PM2] Done.*
然后终端打印出一个table 和应用信息。它看起来不太贴在这里,所以我将其列出:
App Name: index
id: 0
version: 1.0.0
mode: fork
pid: 8984
status: online
restart: 0
update 0s
cpu: 0%
mem: 26.0 MB
user: ME
watching: disabled
看来节点进程应该是运行ning。但是如果我立即输入 pm2 list 它显示没有进程 运行ning。如果我输入 pm2 停止索引,它会显示:
$ pm2 stop index
[PM2] Spawning PM2 daemon with pm2_home=c:\pm2_system\.pm2
[PM2] PM2 Successfully daemonized
[PM2][ERROR] Process index not found
或者,如果我尝试在命令中使用 ecosystem.config.js,我会得到类似的结果。以下是尝试过的命令:
pm2 reload ecosystem.config.js
pm2 start ecosystem.config.js
运行使用这些命令的示例结果:
$ pm2 start ecosystem.config.js
[PM2] Spawning PM2 daemon with pm2_home=c:\pm2_system\.pm2
[PM2] PM2 Successfully daemonized
[PM2][WARN] Applications sm_api not running, starting...
[PM2] App [sm_api] launched (2 instances)
并且 CLI 打印 table 显示两个状态为 "online" 并正在监视 "enabled" 的实例。然而,应用程序不是 运行ning(从浏览器测试时)和 "pm2 show " returns:
[PM2] Spawning PM2 daemon with pm2_home=c:\pm2_system\.pm2
[PM2] PM2 Successfully daemonized
[PM2][WARN] <app name> doesn't exist
有什么线索是我的 pm2 出了什么问题吗?
这是我的 ecosystem.config.js 文件:
module.exports = {
apps : [{
name: 'sm_api',
script: 'server/index.js',
"log_date_format" : "YYYY-MM-DD HH:mm Z",
// Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
args: 'one two',
instances: 'max',
error_file : "C:\pm2_system\.pm2\logs\sm-api-error",
out_file: "C:\pm2_system\.pm2\logs\sm-api-out",
autorestart: true,
watch: "../",
max_restarts: 10,
max_memory_restart: '1G',
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
},
exec_mode: 'cluster'
}],
};
运行 在 Windows Server 2012 环境中。请注意,我打算在 pm2 工作后添加 pm2-windows-service 包。
好的,我在 pm2 github 问题页面发布问题后得到了答案。
在此分享以防其他人遇到这种情况:
https://github.com/Unitech/pm2/issues/4113
(基本上 pm2 3.2.5 在 Windows 中引入了导致此问题的错误。我的开发安装是 3.2.4。通过在生产中恢复到 3.2.4 解决了这个问题。简单的过程,请参阅上面 link 处的说明。)
作为解决方法,我使用了以下方法:
pm2 start --no-daemon app.js
给那些在 no-daemon
模式下对 运行 说这个的人的注意事项,(pm2 start --no-daemon
),如果你想诊断原因,你应该使用这个模式为什么当你 运行 使用守护程序时,你的脚本会失败。
几乎总是,这是因为你告诉 PM2 在构建时监视一个 dist 文件夹或类似的文件夹,所以 PM2 不断重启直到达到它的限制(因为文件正在以相当快的速度重新生成)然后输出“错误”状态。
运行 in no-daemon
绝对不推荐在生产中使用。确保 PM2 运行ning 作为守护进程,以便它可以自己重新启动,这样它就可以作为进程本身重新启动您的进程。如果您终止终端会话或它们在您的主机上自动超时,您会很快发现您的服务在这种情况下终止。
所以,简而言之.. 以正确的方式去做并找出问题所在,而不是懒惰并将 PM2 变成 node
二进制文件的美化包装器。
以前我成功实施了 PM2,但目前还没有。
我的节点应用程序 可以 运行 如果我手动启动它就好了,但我没有做任何事情通过 PM2 将它传送到 运行,即使 PM2 似乎 正在启动它。这就是我的意思:
如果我 运行 pm2 启动 server/index.js,终端中的响应为:
$ pm2 start server/index.js
[PM2] Spawning PM2 daemon with pm2_home=c:\pm2_system\.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting D:\Program Files\nodeApps\service-management-api\server\index.js in fork_mode (1 instance)
[PM2] Done.*
然后终端打印出一个table 和应用信息。它看起来不太贴在这里,所以我将其列出:
App Name: index
id: 0
version: 1.0.0
mode: fork
pid: 8984
status: online
restart: 0
update 0s
cpu: 0%
mem: 26.0 MB
user: ME
watching: disabled
看来节点进程应该是运行ning。但是如果我立即输入 pm2 list 它显示没有进程 运行ning。如果我输入 pm2 停止索引,它会显示:
$ pm2 stop index
[PM2] Spawning PM2 daemon with pm2_home=c:\pm2_system\.pm2
[PM2] PM2 Successfully daemonized
[PM2][ERROR] Process index not found
或者,如果我尝试在命令中使用 ecosystem.config.js,我会得到类似的结果。以下是尝试过的命令:
pm2 reload ecosystem.config.js
pm2 start ecosystem.config.js
运行使用这些命令的示例结果:
$ pm2 start ecosystem.config.js
[PM2] Spawning PM2 daemon with pm2_home=c:\pm2_system\.pm2
[PM2] PM2 Successfully daemonized
[PM2][WARN] Applications sm_api not running, starting...
[PM2] App [sm_api] launched (2 instances)
并且 CLI 打印 table 显示两个状态为 "online" 并正在监视 "enabled" 的实例。然而,应用程序不是 运行ning(从浏览器测试时)和 "pm2 show " returns:
[PM2] Spawning PM2 daemon with pm2_home=c:\pm2_system\.pm2
[PM2] PM2 Successfully daemonized
[PM2][WARN] <app name> doesn't exist
有什么线索是我的 pm2 出了什么问题吗?
这是我的 ecosystem.config.js 文件:
module.exports = {
apps : [{
name: 'sm_api',
script: 'server/index.js',
"log_date_format" : "YYYY-MM-DD HH:mm Z",
// Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
args: 'one two',
instances: 'max',
error_file : "C:\pm2_system\.pm2\logs\sm-api-error",
out_file: "C:\pm2_system\.pm2\logs\sm-api-out",
autorestart: true,
watch: "../",
max_restarts: 10,
max_memory_restart: '1G',
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
},
exec_mode: 'cluster'
}],
};
运行 在 Windows Server 2012 环境中。请注意,我打算在 pm2 工作后添加 pm2-windows-service 包。
好的,我在 pm2 github 问题页面发布问题后得到了答案。
在此分享以防其他人遇到这种情况:
https://github.com/Unitech/pm2/issues/4113
(基本上 pm2 3.2.5 在 Windows 中引入了导致此问题的错误。我的开发安装是 3.2.4。通过在生产中恢复到 3.2.4 解决了这个问题。简单的过程,请参阅上面 link 处的说明。)
作为解决方法,我使用了以下方法:
pm2 start --no-daemon app.js
给那些在 no-daemon
模式下对 运行 说这个的人的注意事项,(pm2 start --no-daemon
),如果你想诊断原因,你应该使用这个模式为什么当你 运行 使用守护程序时,你的脚本会失败。
几乎总是,这是因为你告诉 PM2 在构建时监视一个 dist 文件夹或类似的文件夹,所以 PM2 不断重启直到达到它的限制(因为文件正在以相当快的速度重新生成)然后输出“错误”状态。
运行 in no-daemon
绝对不推荐在生产中使用。确保 PM2 运行ning 作为守护进程,以便它可以自己重新启动,这样它就可以作为进程本身重新启动您的进程。如果您终止终端会话或它们在您的主机上自动超时,您会很快发现您的服务在这种情况下终止。
所以,简而言之.. 以正确的方式去做并找出问题所在,而不是懒惰并将 PM2 变成 node
二进制文件的美化包装器。