xampp for windows 不支持 cron 是因 windows 无类 unix 的 cron daemon,且 xampp 未集成该组件;php.ini 或 apache 中任何 cron 相关配置均无效。唯一可靠方式是用 windows 任务计划程序调用 c:\xampp\php\php.exe -f "c:\xampp\htdocs\espo\bin\console" crm:cron:run,并确保 cli 模式下的 php.ini 已正确配置 timezone、memory_limit 和必要扩展。

为什么 XAMPP 里直接配 cron 不生效
因为 Windows 没有 cron daemon,XAMPP for Windows 也不提供任何类 Unix 的定时服务组件。你在 php.ini 里加 cron.enable=1 或在 Apache 配置里写 CronJob 指令,全无效——这不是配置漏了,是根本不存在这个模块。
用 Windows 任务计划程序调用 php.exe 最靠谱
这是唯一能复用 EspoCRM 原生 CLI 脚本(如 php bin/console crm:cron:run)的方式,且行为最接近生产环境。
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
- 先确认
php.exe在 PATH 中,或直接用绝对路径:C:\xampp\php\php.exe - EspoCRM 的定时任务入口是
bin/console,不是你自写的cron.php;必须进项目根目录执行,否则会报Class 'Espo\Core\Application' not found - 任务计划程序中,“操作” → “启动程序” 填:
C:\xampp\php\php.exe,“参数” 填:-f "C:\xampp\htdocs\espo\bin\console" crm:cron:run,“起始于” 填:C:\xampp\htdocs\espo - 务必勾选“不管用户是否登录都要运行”,否则锁屏后任务就停了
- 建议设置为每分钟执行一次(EspoCRM 内部会自己判断是否真要跑),避免漏掉邮件队列、工作流触发等关键逻辑
PHP CLI 和 Web SAPI 的 php.ini 是两套配置
EspoCRM 的定时任务走的是 CLI 模式,加载的是 C:\xampp\php\php.ini,不是 Apache 用的 C:\xampp\apache\bin\php.ini。很多问题出在这儿:
-
date.timezone没设?CLI 下DateTime会报Warning: DateTime::__construct(): It is not safe to rely on the system's timezone settings -
memory_limit太小?crm:cron:run执行时可能爆内存,建议设为512M或-1 - 扩展没开?比如
pdo_mysql、gd、zip必须在 CLI 的php.ini里启用,否则连数据库都连不上 - 测试 CLI 配置是否生效:命令行运行
C:\xampp\php\php.exe -i | findstr "timezone memory_limit"
别跳过日志和路径验证这一步
任务计划程序里点“运行”不报错,不代表脚本真执行成功了。EspoCRM 的 cron 输出默认不显示,错误全吞在后台。
- 执行命令时加输出重定向:
-f "C:\xampp\htdocs\espo\bin\console" crm:cron:run >> C:\temp\espo-cron.log 2>&1 - 首次运行前,先手动在 CMD 里执行一遍完整命令,看有没有
require(): failed to open stream或Class not found - 注意
bin/console文件顶部的#!/usr/bin/env php在 Windows 下无效,必须显式用php.exe -f调用,不能双击或直接运行 .bat - 如果用 .bat 封装,内容只能是单行:
C:\xampp\php\php.exe -f "C:\xampp\htdocs\espo\bin\console" crm:cron:run,多一行空格或 BOM 都会导致失败
php.ini 路径、include_path、当前工作目录三者不一致导致的。每次改完配置,记得清空 data/cache 目录再试。










