三步使用cronjobs自动化去执行Yii 控制台任务

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

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

 

  
  
  
  
  1. 'db'=>array
  2.                         'connectionString' => 'mysql:host=localhost;dbname=testdrive'
  3.                         'emulatePrepare' => true, 
  4.                         'username' => 'root'
  5.                         'password' => ''
  6.                         'charset' => 'utf8'
  7.                 ),  

2. 继承CConsoleCommand写入自己的命令类,Yii提供了两种方式去执行,如果你执行单一的任务,直接在run方法里面写,另外一种就是同写你的Controller(控制器),前面增加actionXXX,framework/console 下面提供了很多实例供我们参考使用。

注意:避免一些名称造成莫名其妙的问题, 请遵守Yii官言文档控制台命名规则,详细查看Yii Console Application文档

 

CHelpCommand

  
  
  
  
  1. class CHelpCommand extends CConsoleCommand 
  2.         /** 
  3.          * Execute the action. 
  4.          * @param array $args command line parameters specific for this command 
  5.          */ 
  6.         public function run($args
  7.         { 
  8.                 $runner=$this->getCommandRunner(); 
  9.                 $commands=$runner->commands; 
  10.                 if(isset($args[0])) 
  11.                         $name=strtolower($args[0]); 
  12.                 if(!isset($args[0]) || !isset($commands[$name])) 
  13.                 { 
  14.                         if(!emptyempty($commands)) 
  15.                         { 
  16.                                 echo "Yii command runner (based on Yii v".Yii::getVersion().")\n"
  17.                                 echo "Usage: ".$runner->getScriptName()." <command-name> [parameters...]\n"
  18.                                 echo "\nThe following commands are available:\n"
  19.                                 $commandNames=array_keys($commands); 
  20.                                 sort($commandNames); 
  21.                                 echo ' - '.implode("\n - ",$commandNames); 
  22.                                 echo "\n\nTo see individual command help, use the following:\n"
  23.                                 echo "   ".$runner->getScriptName()." help <command-name>\n"
  24.                         } 
  25.                         else 
  26.                         { 
  27.                                 echo "No available commands.\n"
  28.                                 echo "Please define them under the following directory:\n"
  29.                                 echo "\t".Yii::app()->getCommandPath()."\n"
  30.                         } 
  31.                 } 
  32.                 else 
  33.                         echo $runner->createCommand($name)->getHelp(); 
  34.         } 
  35.         /** 
  36.          * Provides the command description. 
  37.          * @return string the command description. 
  38.          */ 
  39.         public function getHelp() 
  40.         { 
  41.                 return parent::getHelp().' [command-name]'
  42.         } 
  43. }  

使用Action执行清理命令

 

  
  
  
  
  1. class CleanupCommand extends CConsoleCommand { 
  2.           
  3.          private $sessionTableName = 'it_common_session'
  4.           
  5.          /** 
  6.           * 自动执行清理Session,每2分钟. 
  7.           */ 
  8.          public function actionSession() { 
  9.                  $now = time(); 
  10.                 $sql="DELETE FROM {$this->sessionTableName} WHERE lastactivity < $now"
  11.                 $command = Yii::app()->dz->createCommand($sql); 
  12.                 $command->execute(); 
  13.          } 
  14.           
  15.          /** 
  16.           * 清理系统缓存,每天早上7:30 
  17.           */ 
  18.          public function actionCache() { 
  19.                  Yii::app()->cache -> flush(); 
  20.                 Yii::app()->dbcache -> flush(); 
  21.                 Yii::app()->fcache -> flush(); 
  22.          } 
  23.           
  24.          /** 
  25.           * 清除上传临时文件 
  26.           */ 
  27.          public function actionTempfiles() { 
  28.                  $dir = Yii::getPathOfAlias('site.frontend.www.uploads.temp').'/'
  29.                 foreach(glob($dir.'*.*'as $v){ 
  30.                     unlink($v); 
  31.                 } 
  32.          } 
  33. }  

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

 

  
  
  
  
  1. 30    2    * * *    /usr/local/webserver/php/bin/php php /data/console.php clean >>/path/to/logfile  

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

常见问题:
1.如果crontab 没有自动执行,仔细检测你的语法是否正确。
2.确定protected/yiic  文件是否有执行权限, 如果没有使用命令 chmod +x yiic  授权

 

转载请说明出处

文章出自:   IT快讯网   |  原文地址: http://www.itkuaixun.com/bbs/thread-47-1-1.html

 

你可能感兴趣的:(职场,休闲,cronjobs,Yii控制台)