1. 在yii2 项目中 ,定时任务是放在
2. 在项目里边遇到的坑
刚开始在做项目的时候,将项目的 命令空间 由 app 改为 supermarket
定时任务的代码写完了,
1. 先在 本地 用 windows 的 cmd 去测试 :输入如下命令 :
进入到项目的根目录 (xiaoniao-new) ,使用如下命令 :
解释 : php yii 控制器/方法名
注意 :如上的命令是在 php ,被加入环境变量的情况下,可以直接使用 php
查看 php 是否加入环境变量的命令 : php -v
2. 执行了 php yii 控制器/方法名 命令之后,直接报错
报错原因是因为,同事之前将项目跟目录下面的一些文件删除了,我去 恰恰用到的两个文件全被删了
解决 : 重新下载的框架代码,加上了这两个文件在去执行上面的命令
3. 报错 db 这个组件应该有个 class 的值
原因 : yii2 控制台运行的时候,加载的是 配置文件 config 里面的 console.php 这配置文件
打开 console.php 文件,果然没有 db 这个项 的配置 ,(疑问: 那为什么在项目里面访问的时候,就没有报错了,哈哈哈,因为在项目里边访问的时候,用的不是这配置文件啊,这个配置文件只有在 定时任务的时候才会用啊)
乖乖的加上 db 的配置,在去执行 刚才的命令 : php yii 控制器/方法名
4. 又出现问题了 : 无法请求 channel-statistics/output
这个还是要仔细看报错信息才能发现喔
5. 根据之前的经验,分析可能出现的原因,左思右想,明明存在,为什么访问不了
想想之前的经历 : 可能是 由于 命名空间的问题???由于命名空间不一致,导致无法访问
6. 打开 配置文件 console.php
commands 下,文件对应的 命名空间是一致的呀,为什么会不能执行了
万般无奈之下,打开了 yii2 框架源码 的 配置文件 console.php 看看
源码里边用的是 : app
试着将项目里边的 console.php 和 commands 下文件 对应的命名空间 都修改为 app ,在去执行刚才的命令
我去,惊喜无处不在,竟然可以执行了
7. 在说说遇到的另一个问题,commands 下的文件引用的 controller 应该是
use yii\console\Controller; 而不是 use yii\web\Controller; 这个坑我爬过来了
8. 本地测试完了,该在 linux 服务器上测试了,上传代码,crontab 创建
1. crontab -e 打开 在里面配置 , 定时任务的代码。如下
配置如下代码:前面时间控制另行查询,这里不做解释
2. 重新启动 crontable 命令。
sudo service crond restart
ok.静静的等待结果
3. 如果没有结果,排除错误的方法
在终端 直接执行,刚才的配置,等待结果
结果ok , 那就说明
基本能确定 就是 定时任务的时间配置有问题 (自行查询时间配置格式 解决)!!!!