yii linux 自動執行腳本

今天用yii開發的系統中要配置一個自定執行的腳本 php

1.配置好product/config/console.php裏面須要用到的組件,像數據庫鏈接 mysql

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

2.繼承CConsoleCommand寫入本身的命令類。 sql

Yii提供了兩種方式去執行,若是你執行單一的任務,直接在run方法裏面寫,另一種就和Controller(控制器)中的Action(動做)相似,前面增長actionXXX,在framework/console下提供了不少實例供咱們參考使用。例如CHelpCommand直接使用run: 數據庫

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

接下來使用使用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()->db->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, 增長一行 session

 
  1. 30 2 * * * php /path/to/console.php cleanup xxx這裏的參數放action >> /path/to/logfile

須要在Yii應用目錄下建立和入口文件同級的console.php: app

 
  1. <?php
  2. $yiic=dirname(__FILE__).'/protected/yiic.php';
  3. $config=dirname(__FILE__).'/protected/config/console.php';
  4. @putenv('YII_CONSOLE_COMMANDS='.dirname(__FILE__).'/protected/commands');
  5.  
  6. require_once($yiic);

上面的意思是說天天晚上兩點自動執行清理任務,簡單幾步就完成了強大的自動化功能任務,是否是夠簡單? frontend

常見問題: yii

1).若是crontab 沒有自動執行,仔細檢測你的語法是否正確。 ide

2).肯定protected/yiic 文件是否有執行權限, 若是沒有使用命令 chmod +x yiic 受權

相關文章
相關標籤/搜索