在 Linux 环境下,我们通常用 Crontab 来解决定时任务。但在 Windows 服务器或本地开发环境中,任务计划程序 (Task Scheduler) 是更原生的解决方案。
本文将详解如何配置 Windows 计划任务来执行 PHP 脚本,并重点解决"任务显示运行成功但业务未执行"、"看不到日志输出"等常见问题。
一、前置环境检查
在配置计划任务前,先确保 PHP CLI 可正常运行:
查看 PHP 版本,确认环境变量或绝对路径可用
D:\phpstudy_pro\Extensions\php\php7.4.3nts\php.exe -v
测试框架路由是否能正常访问:
cd /d D:\phpstudy_pro\WWW\crm\public\
php.exe -q index.php /addons/facrm/autotask/index
如果这里报错,请先解决框架配置问题,再添加到计划任务。
二、图形界面配置详解
1. 创建任务(非基本任务)
打开 任务计划程序 (
taskschd.msc),右侧点击"创建任务"(不要使用"创建基本任务",后者功能受限)。2. 常规配置
- 名称:
CRM_AutoTask(建议带项目名前缀,方便管理) - 安全选项: 勾选"不管用户是否登录都要运行"、"使用最高权限运行"
- 配置: 选择对应系统版本(Windows Server 选对应版本,Win10/11 选 Windows 10)

3. 触发器配置
根据业务需求设置:
- 每天: 适合日终批处理
- 每分钟: 需设置"重复任务间隔"为 1 分钟,持续时间"无限期"

4. 操作配置(核心步骤)
| 配置项 | 值 |
|---|---|
| 程序或脚本 | cmd.exe |
| 添加参数 | /c "D:\phpstudy_pro\Extensions\php\php7.4.3nts\php.exe -q D:\phpstudy_pro\WWW\crm\public\index.php /addons/crm/autotask/index >> D:\crm_task.log 2>&1" |
| 起始于(可选) | D:\phpstudy_pro\WWW\crm\public\ |

参数解释:
cmd /c: 通过命令提示符执行,/c表示执行完毕后关闭窗口>>: 追加输出到日志(不会覆盖历史记录)2>&1: 将错误信息(stderr)合并到标准输出,确保报错也能记录
关于"起始于":
对于 ThinkPHP/迅睿 CMS 等框架,强烈建议设置工作目录为
对于 ThinkPHP/迅睿 CMS 等框架,强烈建议设置工作目录为
public 文件夹。否则 PHP 进程可能找不到 vendor 目录或配置文件,导致类加载失败。5. 设置优化
- 停止任务: 如果运行时间超过 1小时(防止 PHP 死循环)
- 电源: 取消"只有在交流电源时才启动"(服务器通常需始终运行)
另附使用使用批处理文件方案
1. 创建批处理文件
在项目根目录创建 D:\phpstudy_pro\WWW\crm\cron_task.bat:
@echo off
chcp 65001 >nul :: 设置UTF-8编码,防止中文乱码
setlocal enabledelayedexpansion
:: ================= 配置区 =================
set PHP_PATH=D:\phpstudy_pro\Extensions\php\php7.4.3nts\php.exe
set PROJECT_PATH=D:\phpstudy_pro\WWW\crm
set ROUTE=/addons/facrm/autotask/index
set LOG_PATH=D:\phpstudy_pro\WWW\crm\runtime\log\task
:: =========================================
:: 创建日志目录(如果不存在)
if not exist "%LOG_PATH%" mkdir "%LOG_PATH%"
:: 生成带日期的日志文件名(自动按天分割)
set LOG_FILE=%LOG_PATH%\task_%date:~0,4%%date:~5,2%%date:~8,2%.log
:: 记录开始时间
echo [%date% %time%] =========================================== >> "%LOG_FILE%"
echo [%date% %time%] 任务开始执行... >> "%LOG_FILE%"
:: 切换到项目目录( crucial! )
cd /d "%PROJECT_PATH%\public"
:: 执行PHP命令(使用call可以正确获取errorlevel)
call "%PHP_PATH%" -q index.php %ROUTE% >> "%LOG_FILE%" 2>&1
set EXIT_CODE=%errorlevel%
:: 记录结束状态和退出码
if %EXIT_CODE% == 0 (
echo [%date% %time%] 执行成功,退出码:%EXIT_CODE% >> "%LOG_FILE%"
) else (
echo [%date% %time%] 执行失败,退出码:%EXIT_CODE% >> "%LOG_FILE%"
:: 可在此添加失败通知逻辑,如发送邮件或写入系统事件
)
:: 可选:只保留最近30天的日志(自动清理)
forfiles /p "%LOG_PATH%" /s /m *.log /d -30 /c "cmd /c del @path" 2>nul
endlocal
exit /b %EXIT_CODE%
计划任务中引用 BAT 文件
常规选项卡保持不变,操作选项卡配置:
| 配置项 | 值 |
|---|---|
| 程序或脚本 | D:\phpstudy_pro\WWW\crm\cron_task.bat |
| 添加参数 | (留空) |
| 起始于 | D:\phpstudy_pro\WWW\crm\ |
⚠️ 注意:此时"起始于"建议填项目根目录而非
public,因为批处理文件内部已经处理了 cd /d 切换。
解决Windows宝塔面板无法启动问题,解决方法就是找到C:\BtSoft\panel\script\bt.bat(具体根据自己宝塔安装路径),通过重启面板服务或修复面板即可完成修复面板无法启动的问题
介绍Windows操作系统下的DOS命令大全,并提供一些实用技巧,帮助读者更好地利用命令行和批处理功能,提高工作效率和技能。
打开文件资源管理器右键点击任务栏中的文件夹图标,或按 Win + E 打开。找到当前下载文件夹进入 此电脑 → 左侧导航栏中的 Downloads(默认路径为 C:\Users\用户名\Downloads)。修改下载文件夹位置右键点击 下载 → 选择 属性。切换到 位置 选项卡。输入新的目标路径(如 D:\MyDownloads),或点击 移动 选择现有文件夹。点击 应用 → 确认移动文件到新位置
如果你使用了windows版宝塔面板,并且采用nginx 作为WEB服务器,在安装时fastadmin可能会出现页面无法打开的情况。解决办法其实比较简单。以安装的PHP7.3版本为例按照下图的路径找到PHP配置文件打开文件,如下图注释掉try_files $uri = 404;这行代码最后重启PHP,配置即可生效。
1. 切换到C盘根目录打开终端cmd后,输入cd C:\(一定要加上后面的反斜扛)2.切换到C盘子目录打开终端cmd后,输入cd C:\dir1(切换到C盘下目录dir1)3.切换到其他盘根目录打开终...
windows下redis服务的启动方式