热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux下使用Cronjobs自动化执行Yii控制台任务

Linux下使用Cronjobs自动化执行Yii控制台任务

这篇文章将介绍如何在Linux下使用Cron jobs自动化执行Yii Console Application(控制台)任务,像每天晚上执行缓存清理,临时文件清理,发送邮件,网站备份等等,重复的工作都交给服务器后台去完成,Yii本身已经提供了强大的支持,我们所做的工作就很少,当使用yiic webapp 自动生成工程结构时,强大的Yii已经全部帮我们生成好,仅仅只需三步。

1.配置好product/config/console.php里面需要用到的组件,像数据库连接

'db'=>array(
    'connectionString' => 'mysql:host=localhost;dbname=testdrive',
    'emulatePrepare' => true,
    'username' => 'root',
    'password' => '',
),

2.继承CConsoleCommand写入自己的命令类。

Yii提供了两种方式去执行,如果你执行单一的任务,直接在run方法里面写,另外一种就和Controller(控制器)中的Action(动作)类似,前面增加actionXXX,在framework/console下提供了很多实例供我们参考使用。例如CHelpCommand直接使用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()."  [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 \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]';
    }
}

接下来使用使用Action执行清理命令

class CleanupCommand extends CConsoleCommand {

    private $sessiOnTableName= 'it_common_session';

    /**
     * 自动执行清理Session,每2分钟.
     */
    public function actionSession() {
        $now = time();
        $sql="DELETE FROM {$this->sessionTableName} WHERE lastactivity <$now";
        $command = Yii::app()->db->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);
        }
    }
}

3.使用Linux命令,?vi crontab -e?打开自动执行tab, 增加一行

30 2 * * * php /path/to/console.php cleanup xxx >> /path/to/logfile

需要在Yii应用目录下创建和入口文件同级的console.php:


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

常见问题:

1).如果crontab 没有自动执行,仔细检测你的语法是否正确。

2).确定protected/yiic?文件是否有执行权限, 如果没有使用命令?chmod +x yiic?授权


推荐阅读
  • 解决phpMyAdmin运行错误:mysqli_init(): 属性访问尚未允许
    本文探讨了在使用phpMyAdmin过程中遇到的mysqli_init()函数错误,并提供了有效的解决方案。 ... [详细]
  • 本文探讨了在执行SQL查询时遇到的因字符集不同而导致查询结果差异的问题,特别是涉及中文字符时。文章分析了在不同字符集设置下,SQL查询结果的变化,并提供了详细的解决方案。 ... [详细]
  • 开发笔记:新手DVWACSRF
    开发笔记:新手DVWACSRF ... [详细]
  • 本文详细介绍了在PHP中如何创建新文件以及如何使自定义函数在整个项目中全局可用的方法,包括最新的实践技巧。 ... [详细]
  • SQL注入实验:SqliLabs第38至45关解析
    本文深入探讨了SqliLabs项目中的第38至45关,重点讲解了堆叠注入(Stacked Queries)的应用技巧及防御策略。通过实际案例分析,帮助读者理解如何利用和防范此类SQL注入攻击。 ... [详细]
  • KKCMS代码审计初探
    本文主要介绍了KKCMS的安装过程及其基本功能,重点分析了该系统中存在的验证码重用、SQL注入及XSS等安全问题。适合初学者作为入门指南。 ... [详细]
  • 本文详细记录了《PHP与MySQL Web开发》第一章的学习心得,特别关注了PHP的基本构成元素、标记风格、编程注意事项及表单处理技巧等内容。 ... [详细]
  • 本文详细探讨了在Windows Server 2003环境下遇到MySQL连接失败(错误代码10061)的解决方案,包括通过卸载特定的Windows更新和调整系统注册表设置的方法。 ... [详细]
  • 尝试从 MySQL 转向 SQL Server 2008 时遇到了安装错误,提示“系统配置未能初始化”,错误代码为 0x84B10001。怀疑可能是由于之前的 MySQL 安装残留导致的注册表问题。寻求专家建议。 ... [详细]
  • 解决getallheaders函数导致的500错误及8种服务器性能优化策略
    本文探讨了解决getallheaders函数引起的服务器500错误的方法,并介绍八种有效的服务器性能优化技术,包括内存数据库的应用、Spark RDD的使用、缓存策略的实施、SSD的引入、数据库优化、IO模型的选择、多核处理策略以及分布式部署方案。 ... [详细]
  • 本文详细探讨了在不同服务器上运行的PHP程序如何成功连接MySQL数据库的方法,包括常见的连接失败原因及解决方案。 ... [详细]
  • 深入理解FastDFS
    FastDFS是一款高效、简洁的分布式文件系统,广泛应用于互联网应用中,用于处理大量用户上传的文件,如图片、视频等。本文探讨了FastDFS的设计理念及其如何通过独特的架构设计提高性能和可靠性。 ... [详细]
  • mysql 分库分表策略_【数据库】分库分表策略
    关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多, ... [详细]
  • 本文介绍如何利用Python中的Epoll机制构建一个高效的Web服务器,该服务器能够处理多个并发连接,并向每个连接的客户端返回预定义的响应文本。通过使用Epoll,服务器可以实现高性能的I/O多路复用。 ... [详细]
  • 本文介绍了如何通过安装 VirtualBox 和 Vagrant 来快速搭建和管理虚拟机环境。我们将详细探讨如何选择合适的 Box 镜像,以及如何高效地下载、添加和管理这些镜像。 ... [详细]
author-avatar
老薛很厚道
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有