YAF添加CLI定时任务

阅读更多
首先保证php cli模式下支持yaf,请参考本博客
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

你可能感兴趣的:(php,yaf,cli)