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

如何配置Cron仅在PHP脚本出错时发送系统收件箱通知?

解决Cron仅在PHP脚本出错时发送通知的方案

这个问题其实很好解决,核心就是利用Cron的邮件触发逻辑——只有当脚本产生标准错误(stderr)或者非零退出状态码时,才让Cron发送通知。下面给你两种靠谱的实现方式:

方案一:重定向标准输出,保留错误输出

这是最直接的方法,只需要修改Cron命令,把正常输出丢进黑洞,只留错误输出让Cron捕获:

*/2 * * * * php /path/to/your/script.php > /dev/null

原理说明:

  • > /dev/null 会把脚本的标准输出(stdout)(也就是正常执行时的日志内容)重定向到系统黑洞,不会被Cron收集
  • 脚本的标准错误(stderr)(PHP的报错、警告等)会默认保留,当有错误产生时,Cron会自动把这些错误信息发送到你的系统收件箱

额外补充:

如果你的PHP配置默认把错误输出到stdout(比如某些自定义环境),可以强制让PHP把错误发送到stderr,命令改成:

*/2 * * * * php -d error_log=php://stderr /path/to/your/script.php > /dev/null

或者直接在PHP脚本开头添加一行配置:

ini_set('error_log', 'php://stderr');

方案二:基于退出状态码控制输出

这种方法更灵活,适合需要捕获"出错时的所有输出"的场景,前提是你的PHP脚本能正确返回退出状态码:

*/2 * * * * output=$(php /path/to/your/script.php); if [ $? -ne 0 ]; then echo "$output"; fi

原理说明:

  • output=$(...) 先捕获脚本的所有输出(包括stdout和stderr)
  • $? 是上一条命令的退出状态码,-ne 0 表示"不等于0"(即脚本执行出错)
  • 只有当脚本出错时,才会把捕获到的输出打印出来,Cron会收集这些内容并发送邮件

额外补充:

如果你的PHP脚本还没设置退出状态码,可以在代码里手动添加:

// 脚本正常执行完成时返回0
exit(0);

// 脚本出错时返回非0值(比如1)
exit(1);

总结

  • 方案一最简单,适合绝大多数常规场景,不需要修改PHP代码
  • 方案二更灵活,能捕获出错时的完整输出,但需要脚本配合设置退出码

内容的提问来源于stack exchange,提问作者Patoshi パトシ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:12:59