You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PM2服务停止触发邮件:cron运行脚本误报所有服务已停止求助

问题原因与解决办法

你的猜测完全正确:PM2的进程是按用户隔离的,root用户执行PM2相关命令时,只能看到root自己启动的PM2进程,看不到ubuntu用户运行的PM2服务。这就导致cron以root身份运行脚本时,获取到的$running数组为空,array_diff后会把所有$required里的服务都判定为异常,从而误报。

解决方法

方法1:用ubuntu用户配置cron

  • 切换到ubuntu用户:su - ubuntu
  • 编辑该用户的定时任务:crontab -e
  • 添加脚本执行命令(务必用绝对路径):
    */5 * * * * /usr/bin/php /home/ubuntu/your_monitor_script.php
    
    (示例中的*/5 * * * *代表每5分钟执行一次,可根据需求调整时间规则)

方法2:保留root cron,但指定用户执行PM2命令

如果必须用root用户的cron,需要在脚本里获取PM2进程时,强制以ubuntu用户身份执行命令。假设你之前是通过shell_exec获取PM2进程数据,修改如下:

// 原获取命令(root执行时拿不到ubuntu的进程)
// $pm2_output = shell_exec('pm2 list --json');

// 修改后:指定ubuntu用户执行PM2命令
$pm2_output = shell_exec('su - ubuntu -c "pm2 list --json"');

// 后续解析$pm2_output得到$running数组的逻辑不变

额外注意事项

  • 脚本中所有文件、命令路径尽量用绝对路径,避免cron环境变量缺失导致找不到资源
  • 可以先手动测试命令:用root用户执行su - ubuntu -c "pm2 list",确认能看到ubuntu用户的PM2进程,再放到脚本里

内容的提问来源于stack exchange,提问作者Ammar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 22:15:39