【问题标题】:Cannot Restart or Start Stopped Process in PM2无法在 PM2 中重新启动或启动已停止的进程
【发布时间】:2022-01-29 10:48:05
【问题描述】:

我在服务器上运行 PM2,处理一些 Node.Js 进程。它在大多数情况下运行良好。有时我出于各种原因需要暂时停止服务。

奇怪的是,我无法从stopped 状态启动进程。换句话说,我无法执行pm2 stop myproject && pm2 start myprojectpm2 restart myproject。每当我这样做时,PM2 都会显示以下消息:

[PM2] Applying action restartProcessId on app [myproject](ids: [ xx ])
[PM2][ERROR] Process xx not found

我已经通过删除进程并重新开始它来解决问题。

pm2 delete myproject && pm2 start app.config.js

它有效,但我认为这不是一个好方法。特别是当我需要多次停止服务以进行测试时。

这是app.config.js 文件

module.exports = {
  apps: [
    {
      name: 'myproject',
      script: './build/server.js',
      instances: 1,
      exec_mode: 'cluster',
      autorestart: true,
      watch: ['server.js', 'app.config.js', 'src'],
      watch_delay: 1000,
      ignore_watch: ['node_modules', 'logs'],
      exp_backoff_restart_delay: 2000,
      max_memory_restart: '100M',
      log_file: './logs/app.log',
      log_date_format: 'YYYY-MM-DD HH:mm:ss',
      combine_logs: true,
      env: {
        SOME_ENV: 'some_value'
      }
    }
  ]
};

请帮我解决这个问题。非常感谢任何反馈。

[编辑]附加信息:

  • 我以非 root 用户身份运行命令
  • 有趣的是,在我重新启动进程后,内部 PM2 日志显示以下项目PM2 error: [RestartProcessId] PM2 is being killed, stopping restart procedure...
  • pm2 status 在我运行 pm2 restart myproject 后显示 stopped。它没有可见的 id,但我可以使用 pm2 show myproject 检查它
│ id │ name      │ mode    │ ↺ │ status   │ cpu │ memory │ 
│    │ myproject │ cluster │ 0  │ stopped │ 0%   │ 64.1mb │

【问题讨论】:

  • 启动应用后pm2 status 命令会显示什么?另外,您是以 root 用户还是普通用户启动应用程序?
  • 你检查过 pm2 日志吗?似乎当您删除 pm2 进程时它工作正常,从日志中我可以看到传递给进程的idxx。似乎当您停止该过程时,它没有正确停止。我强烈建议检查日志和pm2 list
  • @yogski 和App nameid 列在pm2 status 之后包含什么?请确保在运行 pm2 restart 命令时使用正确的应用名称/ID。另外,也许尝试将pm2 更新到最新版本?
  • 这就是为什么我要求您检查日志的原因,因为如果 PM2 服务正在运行,它会自动选择 processId 在您的情况下它是 xx,这意味着服务本身已停止。
  • @ApoorvaChikara 感谢您为我指明正确的方向。我是非 root 用户,这与我不知道的 PM2 设置有关,所以这个问题可以在内部升级。

标签: node.js pm2


【解决方案1】:

这可能是因为系统变量已被覆盖或删除以映射 pm2 函数。当我在我的系统上安装 pdftk 并错误地覆盖了系统变量时,我遇到了类似的问题。

将此添加为您的路径变量

%SystemRoot%/System32/Wbem

这对我有用。

【讨论】: