http://lhdst-163-com.iteye.com/blog/2337379
YAF框架下添加定时任务支持很简单。
可以新建一个cli目录,放入index.php
bootstrap()->run(); $app->getDispatcher()->dispatch(new Yaf_Request_Simple("index", "Admin", "Cli")); ?>
通常website下执行
$app->bootstrap()->run();
而在cli下,可以自定义执行某个action,因此可以改成
$app->getDispatcher()->dispatch(new Yaf_Request_Simple("index", "Admin", "Cli"));
但是这样做有个问题,如果有些初始化操作是在bootstrap中执行的,则直接调用
$app->getDispatcher()->dispatch(new Yaf_Request_Simple("index", "Admin", "Cli"));
会导致一些类库没有引入等问题,导致cli的执行环境跟website不一致,很可能导致cli执行错误。为了避免这个问题,我们还是执行
$app->bootstrap()->run();
默认情况下,bootstrap执行完后,会执行默认module下的indexController的indexAction。我们在indexAction这里处理
runCli(); exit; } redirect("/xxx/index"); return false; } protected function runCli() { echo datetime() . "------ START CRON JOB -----" . PHP_EOL; D("xxx")->cliTask(); echo datetime() . "------ END CRON JOB -----" . PHP_EOL; return false; } }
当第二个参数是cli时,我们执行cli命令,否则跳转到website默认页面
我们可以将执行命令写入cli.sh文件,放在/public/index.php同层目录下
#!/bin/bash filepath=$(cd "$(dirname "$0")"; pwd) cd $filepath logname="cli_"$(date +%Y%m%d); su www-data -c "php index.php cli 1>>../application/log/cli/$logname.log 2>&1"
然后再系统中添加cronjob,定义一个周期执行一次。
也可以手动执行,查看运行情况,内容会输出到../application/log/cli/$logname.log
sh cli.sh
添加定时任务,请查看本博客
http://lhdst-163-com.iteye.com/blog/1797038