Fecmall console 介绍和配置 ¶
关于该入口的描述和说明
console 介绍 ¶
console 是fecmall其中的一个入口,作为脚本执行端, 处理的都是在后台跑的脚本,以命令行的方式执行,大致分为2种:
1.周期性跑的脚本,需要在cron中进行设置,譬如:
05 * * * * /bin/bash /www/web/fecshop/vendor/fancyecommerce/fecshop/shell/urlRewrite.sh >> /www/web_logs/fecshop/urlRewrite.log 2>&1
说明:
05 * * * *
: cron 设置周期的部分,关于cron表达式日期周期说明,可以参看文档:http://www.fecmall.com/topic/4444
/bin/bash
: 跑shell脚本执行的命令
/www/web/fecshop/vendor/fancyecommerce/fecshop/shell/urlRewrite.sh
: shell 文件的路径,这个文件要设置成可执行权限,可以设置成755
>> /www/web_logs/fecshop/urlRewrite.log 2>&1
: 脚本的输出,写入到log文件中,此文件要设置可写权限,可以设置成777 (chmod 777 /www/web_logs/fecshop/urlRewrite.log)
设置完后,就可以周期性的执行脚本了
1.2关于linux cron如何设置
执行命令行:crontab -e
, 将执行脚本粘贴上去,譬如:05 * * * * /bin/bash /www/web/fecshop/vendor/fancyecommerce/fecshop/shell/urlRewrite.sh >> /www/web_logs/fecshop/urlRewrite.log 2>&1
,
需要注意:时间周期是否填写正确,shell文件路径是否正确,shell文件是否可执行(755),日志文件是否存在,并且可写。
2.手动执行的脚本,也就是只有在用到的时候才会手动执行,并不需要 在计划任务中设置。
console 说明 ¶
关于Yii2的命令执行,可以参看文档:Yii2 console
fecmall 安装时使用的migrate,也是console执行命令方式进行的。
在 fecmall 根目录,打开 ./yii
文件,就可以看到入口文件(对于web
执行的端口,是index.php文件)。打开后,可以看到里面的内容:
$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);
除了上面的代码部分和其他的入口的index.php 不一样,其他的内容大致一样
(当然,除了头部的 #!/usr/bin/env php
),
也就是,执行的对象是yii\console\Application($config)
console 入口本地配置文件在 @console/config/
下面,可以在这里进行配置
,就像和其他端口一样。
console 开发 ¶
除了 fecmall 提供的脚本,您可以写一些新的脚本满足自己的需求, 在写之前,您需要了解一下Yii2 console机制。
和其他入口的写法类似,写module
,以及里面的controller
,
不同的是执行的方式不同,譬如:
您建立的module:mycustomer
,controller:MyaccountController
,
action:actionMylogin($email,$password)
,
那么您执行的命令为:
./yii mycustomer/myaccount/mylogin 2358qq.com 111111
即可执行该controller对应的action方法,
参数 2358qq.com
将赋值到action方法的$email
参数,
111111
将赋值到action方法的$password
参数,
然后您就可以在action方法中写您的实现了
另外,对于大数据批处理分页,如果使用php循环查询计算,如果百万数据 会使内存溢出,因此,可以通过shell的方式控制,譬如:
#!/bin/sh
# 得到数据的总页数
pageCount=`./yii customer/order/getpagecount`
echo "There are $pageCount pages to Sync"
for (( i=1; i<=$pageCount; i++ ))
do
# 按照页数循环,开启php进程进行处理
./yii customer/order/list $i
echo "Page $i done"
done
echo "foreach component"
我们在Customer模块中的OrderController
中新建方法
actionList($page)
,$page
就是上面脚本传递的参数 $i
,
这样我们就可以处理一页的数据,进程退出,
然后下一个循环另起新的php进程,即使几亿的数据遍历,
php也不会内存溢出。