`
flex_莫冲
  • 浏览: 1075817 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

YAF添加CLI定时任务

    博客分类:
  • yaf
阅读更多
首先保证php cli模式下支持yaf,请参考本博客
http://lhdst-163-com.iteye.com/blog/2337379

YAF框架下添加定时任务支持很简单。

可以新建一个cli目录,放入index.php
<?php
define('BENCHAMRK_START',  microtime(TRUE));
ini_set('display_errors','On');
error_reporting(E_ALL & ~E_DEPRECATED);
date_default_timezone_set("Asia/Hong_Kong");
define('ROOT_PATH',  realpath(dirname(dirname(__FILE__))));
define('APPLICATION_PATH',  ROOT_PATH . '/application');
define('PUBLIC_PATH',  ROOT_PATH . '/public');
define('VENDOR_PATH',  ROOT_PATH . '/vendor');
$app = new Yaf_Application(ROOT_PATH . "/conf/application.ini");
// $app->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这里处理

<?php

class IndexController extends Controller {

	/**
	 * 默认动作
	 */
	public function indexAction() {
		if (!empty($_SERVER['argv']) && $_SERVER['argv'][1] == 'cli') {
			$this->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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics