Windows 计划任务执行 PHP 定时任务完全指南

      发布在:后端技术      评论:0 条评论
在 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)

    image

3. 触发器配置

根据业务需求设置:
  • 每天: 适合日终批处理
  • 每分钟: 需设置"重复任务间隔"为 1 分钟,持续时间"无限期"image

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\
image

参数解释:

  • cmd /c: 通过命令提示符执行,/c 表示执行完毕后关闭窗口
  • >>: 追加输出到日志(不会覆盖历史记录)
  • 2>&1: 将错误信息(stderr)合并到标准输出,确保报错也能记录
关于"起始于":
对于 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服务的启动方式

热门推荐