pm2 - 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 作为 sudo,而 sudo 模式下的 crontab 无法访问一系列环境。
将 PM2 的所有者更改为您自己(which pm2
查找可执行文件的完整路径),这样您就可以在没有 sudo 的情况下使用它。对 做同样的事情~/.pm2
。
推荐阅读
- python - 字符串到python中的数组
- java - Java RSAPublicKey 工厂异常
- android - Android 因致命 execption main java.lang.ClassCastException 崩溃:java.lang.String 无法转换为包
- apache-spark - 仅覆盖分区 spark 数据集中的一些分区
- php - 挂钩注册表prestashop 1.7
- html - 使图像适合响应大小的 td 的高度
- actions-on-google - 在 V2 Dialogflow 中使用 express 获取正文请求参数
- c# - 核心 2.1 signalR 成功连接但客户端为空
- python - Alien 类没有 rect 属性
- python - DataFrame 存储 n 维列表