如何创建批处理文件通过Windows任务计划程序运行CodeIgniter 2.2函数
解决CodeIgniter 2.2通过Windows任务计划调度控制器函数的问题
我之前帮不少人搞定过CI2在Windows任务计划里跑定时任务的事儿,你的批处理命令其实踩了个典型的坑:没通过CI的官方入口文件index.php来调用控制器,直接指向controllers目录肯定跑不起来。咱一步步来解决:
1. 先写对批处理命令
CI 2.2的CLI模式必须通过项目根目录的index.php启动,而且得指定WAMP里PHP的完整路径(别直接写php,除非你已经把PHP路径加到系统环境变量里了)。
举个具体的例子,假设你的WAMP里PHP版本是5.6.40(自己去C:\wamp\bin\php目录下找对应的版本号),新建一个run_task.bat文件,内容如下:
@echo off "你的PHP完整路径" "C:\wamp\www\tas\index.php" my_controller my_function exit
替换成实际路径后应该是这样:
@echo off "C:\wamp\bin\php\php5.6.40\php.exe" "C:\wamp\www\tas\index.php" my_controller my_function exit
@echo off:关掉命令行的回显,让执行过程更干净- 引号:避免路径里有空格(虽然这里没有,但养成习惯准没错)
exit:执行完命令后自动关闭窗口
2. 先手动测试批处理
别着急扔去任务计划,先双击这个bat文件试试:
- 如果没报错,去验证你的
my_function逻辑有没有触发(比如写个日志到application/logs,或者往数据库插条测试数据) - 如果报错,先排查这几点:
- PHP路径是不是写错了?去对应目录确认
php.exe存在 - 控制器名/方法名对不对?CI2里控制器文件名要首字母大写(比如
My_controller.php),类名和文件名一致,CLI调用时用小写的my_controller就行(默认开启了lowercase_uri配置) my_function是不是public方法?私有/保护方法CLI调用不了
- PHP路径是不是写错了?去对应目录确认
3. 设置Windows任务计划
测试没问题后,就可以加到任务计划里了:
- 打开「任务计划程序」,点击「创建基本任务」
- 填个任务名称(比如「定时执行my_function」),下一步
- 设置触发时间(比如每天凌晨2点),下一步
- 操作选「启动程序」,下一步
- 「程序或脚本」选你刚才写的
run_task.bat的完整路径(比如C:\wamp\www\tas\run_task.bat) - 「起始于」填项目根目录
C:\wamp\www\tas(这步很重要,不然程序可能找不到相对路径的资源) - 完成设置后,右键任务选「运行」,再验证一次逻辑是否执行
4. 常见坑排查
如果任务计划跑不起来,再检查这些点:
- 权限问题:任务的执行用户得有访问WAMP目录和执行PHP的权限,建议在任务设置里勾选「不管用户是否登录都要运行」,并选择「使用最高权限运行」
- 登录验证拦截:如果你的控制器有登录验证逻辑,得在
my_function里判断是不是CLI请求,跳过验证:public function my_function() { // 只允许CLI模式访问 if (!$this->input->is_cli_request()) { show_404(); return; } // 你的业务逻辑 } - 日志排查:在
my_function里加日志代码,方便排查问题:
然后去$this->load->library('log'); $this->log->write_log('info', 'my_function 已通过CLI执行');application/logs目录下看日志文件,确认是否执行成功
内容的提问来源于stack exchange,提问作者Bifa
相关产品推荐
相关产品推荐

