如何通过Crontab实现PM2集群进程零宕机定时重载?
问题原因
- 你最初使用
sudo pm2 start app.json启动应用,对应PM2实例归属root用户,普通用户执行pm2命令时访问的是当前用户名下的PM2进程池,自然找不到目标集群进程。 - 重载时直接指定配置文件偶发的进程ID匹配误差,直接调用应用名可规避该问题。
解决方案
方案1:使用root用户的crontab配置(推荐)
- 执行
sudo crontab -e进入root用户的定时任务编辑界面 - 替换原有规则为以下内容,添加
--wait-ready参数适配你配置里的就绪等待逻辑,确保新进程完全启动后再销毁旧进程,实现真正零宕机:
0 * * * * /usr/local/bin/pm2 reload autocosts.prod --wait-ready > /var/log/pm2/app.cron.log 2>&1
- 保存退出即可生效。
方案2:在普通用户crontab中配置
- 执行
sudo visudo编辑权限配置,添加以下规则(替换your_user为实际用户名),实现免密执行pm2命令:
your_user ALL=(ALL) NOPASSWD: /usr/local/bin/pm2
- 执行
crontab -e进入当前用户的定时任务编辑界面,替换原有规则为以下内容,显式指定root用户的PM2家目录避免进程识别失败:
0 * * * * sudo PM2_HOME=/root/.pm2 /usr/local/bin/pm2 reload autocosts.prod --wait-ready > /var/log/pm2/app.cron.log 2>&1
- 保存退出生效。
验证方法
配置完成后先手动执行一遍定时任务中的完整命令,执行后运行sudo pm2 status查看集群进程的重启时间是否更新,访问业务接口确认无服务中断即可。
内容的提问来源于stack exchange,提问作者João Pimentel Ferreira
相关产品推荐
相关产品推荐

