首页 > 解决方案 > crontab 重新加载 PM2 集群进程

问题描述

我在这个问题上待了一天,没有有效的结果。想象一下,我想每小时使用crontab.

PM2 应用程序就是这个,我从它开始sudo pm2 start app.json(顺便说一句,我认为它不相关,但我使用 pm2 作为 sudo,我不记得为什么)

{
  "apps" : [{
    "name"        : "autocosts.prod",
    "script"      : "bin/server.js",
    "cwd"         : "/var/www/autocosts.prod/",
    "node_args"   : "--use_strict",
    "args"        : "-r prod --print --pdf --social --googleCaptcha --googleAnalytics --database",
    "exec_mode"   : "cluster",
    "instances"   : 4,
    "wait_ready"  : true,
    "listen_timeout" : 50000,
    "watch"       : false,
    "exp_backoff_restart_delay" : 200,
    "env": {
      "NODE_ENV": "production"
    },
    "log_date_format": "DD-MM-YYYY"
  }]
}

我的 crontab 行是

# reload every hour
0 * * * * /usr/local/bin/node /usr/local/bin/pm2 reload /var/www/autocosts.prod/app.json > /var/log/pm2/app.cron.log 2>&1

但是在那个日志文件上我得到一个错误

[PM2] Applying action reloadProcessId on app [autocosts.prod](ids: [ 0, 1, 2, 3 ])
[PM2][ERROR] Process 0 not found
Process 0 not found

似乎 PM2 无法检测到集群的 id 号。

如何让 crontabs 重新加载(零停机时间)PM2 集群进程?

标签: pm2

解决方案


我发现了问题,确实是因为我使用 pm2 作为 sudo,而 sudo 模式下的 crontab 无法访问一系列环境。

将 PM2 的所有者更改为您自己(which pm2查找可执行文件的完整路径),这样您就可以在没有 sudo 的情况下使用它。对 做同样的事情~/.pm2


推荐阅读