yii框架通过控制台命令创建定时任务

假设Yii项目路径为 /home/apps

1. 创建文件 /home/apps/web/protected/commands/console.php

$yii = ‘/home/apps/framework/yii.php‘;
require_once($yii);
$configFile = dirname(__FILE__).‘/../config/console.php‘;
Yii::createConsoleApplication($configFile)->run();

2. 修改配置文件 /home/apps/web/protected/config/console.php,配置需要的组件、数据库连接,日志等信息,格式类似主配置文件main.php

// This is the configuration for yiic console application.
// Any writable CConsoleApplication properties can be configured here.
return array(
    ‘basePath‘=>dirname(__FILE__).DIRECTORY_SEPARATOR.‘..‘,
    ‘name‘=>‘My Console Application‘,
    ‘import‘=>array(
        ‘application.models.*‘,
        ‘application.components.*‘,
        ‘application.extensions.*‘,
    ),
    // preloading ‘log‘ component
    ‘preload‘=>array(‘log‘),

    // application components
    ‘components‘=>array(

        // database settings are configured in database.php
        //‘db‘=>require(dirname(__FILE__).‘/database.php‘),
        ‘db‘=>array(
            //‘connectionString‘ => ‘sqlite:‘.dirname(__FILE__).‘/../data/testdrive.db‘,
            // uncomment the following lines to use a MySQL database
            ‘connectionString‘ => ‘mysql:host=localhost;dbname=testdrive‘,
            ‘emulatePrepare‘ => true,
            ‘username‘ => ‘root‘,
            ‘password‘ => ‘‘,
            ‘charset‘ => ‘utf8‘,
        ),
        ‘log‘=>array(
            ‘class‘=>‘CLogRouter‘,
            ‘routes‘=>array(
                array(
                    ‘class‘=>‘CFileLogRoute‘,
                    ‘levels‘=>‘error, warning‘,
                ),
            ),
        ),

    ),
);

3. 在 /home/apps/web/protected/commands/ 下新建 TestCommand 类,继承 CConsoleCommand,在TestCommand中,可以使用项目的配置信息和Yii的各种方法

class TestCommand extends CConsoleCommand {

    public function getHelp() {
        return ‘test command help‘;
    }

    public function run($args) {
        echo ‘hello ‘. $arg[0];
    }

}

执行命令

php console.php Test

在这个类中我们需要完成2个方法,一个是getHelp(),他用于提供Test这个类命令的帮助信息,我们可以在shell中通过命令来查看这个类的帮助

php console.php help Test

此外这个类的主要功能是通过继承 run($args) 这个方法来实现的,其中$args 为从命令行获得参数数组。
现在如果我们在屏幕上输入:php console.php Test li
我们将看到程序返回: hello li

继承CConsoleCommand写入自己的命令类,Yii提供了两种方式去执行

1. 如果你执行单一的任务,直接在run方法里面写

class CHelpCommand extends CConsoleCommand
{
    /**
     * Execute the action.
     * @param array $args command line parameters specific for this command
     */
    public function run($args)
    {
        $runner=$this->getCommandRunner();
        $commands=$runner->commands;
        if(isset($args[0]))
            $name=strtolower($args[0]);
        if(!isset($args[0]) || !isset($commands[$name]))
        {
            if(!emptyempty($commands))
            {
                echo "Yii command runner (based on Yii v".Yii::getVersion().")\n";
                echo "Usage: ".$runner->getScriptName()." <command-name> [parameters...]\n";
                echo "\nThe following commands are available:\n";
                $commandNames=array_keys($commands);
                sort($commandNames);
                echo ‘ - ‘.implode("\n - ",$commandNames);
                echo "\n\nTo see individual command help, use the following:\n";
                echo "   ".$runner->getScriptName()." help <command-name>\n";
            }
            else
            {
                echo "No available commands.\n";
                echo "Please define them under the following directory:\n";
                echo "\t".Yii::app()->getCommandPath()."\n";
            }
        }
        else
            echo $runner->createCommand($name)->getHelp();
    }
    /**
     * Provides the command description.
     * @return string the command description.
     */
    public function getHelp()
    {
        return parent::getHelp().‘ [command-name]‘;
    }
}

2. 另外一种就是同写你的Controller(控制器),前面增加actionXXX,例如:

class CleanupCommand extends CConsoleCommand {
     private $sessionTableName = ‘it_common_session‘;
     /**
      * Index Action
      */
     public function actionIndex() {
        echo "默认动作";
     }
     /**
      * 自动执行清理Session,每2分钟.
      */
     public function actionSession() {
        $now = time();
        $sql="DELETE FROM {$this->sessionTableName} WHERE lastactivity < $now";
        $command = Yii::app()->dz->createCommand($sql);
        $command->execute();
     }
     /**
      * 清理系统缓存,每天早上7:30
      */
     public function actionCache() {
        Yii::app()->cache -> flush();
        Yii::app()->dbcache -> flush();
        Yii::app()->fcache -> flush();
     }
     /**
      * 清除上传临时文件
      */
     public function actionTempfiles() {
        $dir = Yii::getPathOfAlias(‘site.frontend.www.uploads.temp‘).‘/‘;
        foreach(glob($dir.‘*.*‘) as $v){
            unlink($v);
        }
     }
}    

执行Index动作,默认Index

php cron.php Cleanup

执行Cache动作

php cron.php Cleanup cache

4. 创建定时任务

$ crontab -e
0 2 * * * php console.php cleanup >> /path/to/logfile &

上面的意思是说每天晚上两点自动执行清理任务,简单几步就完成了强大的自动化功能任务.是不是够简单

时间: 2024-10-05 15:14:26

yii框架通过控制台命令创建定时任务的相关文章

Yii框架学习笔记(二)将html前端模板整合到框架中

选择Yii 2.0版本框架的7个理由 http://blog.chedushi.com/archives/8988 刚接触Yii谈一下对Yii框架的看法和感受 http://bbs.csdn.net/topics/390807796 更多内容 百度:yii 前端 http://my.oschina.net/u/1472492/blog/221085 摘要 Yii框架学习笔记(二)将html前端模板整合到框架中 原文地址:http://www.ldsun.com/1309.html 上一节成功将Y

php yii框架 创建项目

第一步是下载框架 windows下 然后 打开yiic.bat 默认的是 PHP_COMMAND=php.exe 建议修改为PHP_COMMAND=E:\wamp\bin\php\php5.4.16\php.exe  (E:\wamp\bin\php\php5.4.16\php.exe)红色的为你php.exe对应的目录 这样运行yii的cmd命令 不会报错 下面在cmd中执行 下面的命令 首先找到yiic 然后webapp后面 是你要创建项目的路径 C:\Users\Administrator

Yii 框架创建自己的 web 应用

本篇文章转载自http://www.ibm.com/developerworks/cn/opensource/os-cn-yii/ Yii 是当今国内外最为流行的 PHP 框架.由于它高性能的特性,被公认为是“最有效率的 PHP 框架”.Yii 提供了今日 Web 2.0 应用开发所需要的几乎一切功能.它可以通过一个简单的命令 yiic 来快速创建一个 Web 应用程序的代码框架,开发人员通过在生成的代码框架上编写自己的业务逻辑,来实现 Web 应用的快速开发.本文将通过具体的实例对 Yii 框

yii框架之gii创建数据表对应的model类

一.首先是在数据库中建立工程需要的表: 二.然后,配置对应文件: 在工程目录下yiiProject\protected\config\main.php.在50行定义了db应用组件,下面后一段注释掉了的mysql的链接配置项,我们将未注释的db注释掉,然后打开mysql链接代码并填写相关信息即可完成mysql链接配置项. 即,把下面代码         'db'=>array(             'connectionString' => 'sqlite:'.dirname(__FILE_

YII框架的部署 通过YII脚手架程序创建应用程序系统

1,把YII框架里面的framework复制粘贴到nginx目录下 2,创建一个商城系统: 1)修改环境变量 制定php.exe的目录 2)C:\Users\Administrator>cd C:\Users\Administrator C:\Users\Administrator>d: D:\>cd wamp D:\wamp>cd nginx D:\wamp\nginx>cd html D:\wamp\nginx\html>cd YII D:\wamp\nginx\h

Yii框架分析(六)——Yii的别名管理与对象创建管理

YiiBase类为YII框架的运行提供了公共的基础功能:别名管理与对象创建管理. 在创建一个php的对象时,需要先include这个类的定义文件,然后再new这个对象.在不同环境下(开发环境/测试环境/线上环境),apache的webroot路径的配置可能不一样,所以这个类的定义文件的全路径就会不同,Yii框架通过YiiBase的别名管理来解决了这个问题. 在创建对象时,需要导入对应类的定义,经常需要使用这5个函数:include().include_once().require().requi

Yii框架分析(三)——类加载机制及应用组件的管理、配置、访问、创建

Yii应用的入口脚本引用出了Yii类,Yii类的定义: class Yii extends YiiBase { } 由yiic创建的应用里Yii类只是YiiBase类的“马甲”,我们也可以根据需求定制自己的Yii类. Yii(即YiiBase)是一个“helper class”,为整个应用提供静态和全局访问入口. Yii类的几个静态成员:$_aliases : 存放系统的别名对应的真实路径$_imports :$_classes :$_includePaths php include paths

YII 框架使用之——创建应用

linux环境为UBUNTU14.04,YII框架的版本是1.1.17 将下载的YII解压缩,压缩后会有三个文件夹,”demos,requirements,framework”,demos 当然就是演示了,暂时不用,而requirements是独立于YII框架的,用于检测服务器信息的. [email protected]:/usr/local/apache243/htdocs/YII$ ls yii build composer.json demos framework nbproject RE

Yii框架配置

1.将yii框架命令行工具yiic.bat的路径加入环境变量,以便可以使用CMD命令创建项目 2.创建项目: framework是yii的核心,尽量保持核心包的完整性以后创建多个项目时可以共用,在framework同级的目录创建一个自己的项目文件夹,如:webapp CMD创建项目:>yiic webapp ../webapp/myblog(因为配置的环境变量是在framework下,故返回上层找webapp) 尊重原创,转载请保留:(Yii框架配置)http://www.cnblogs.com