`
hudeyong926
  • 浏览: 2032902 次
  • 来自: 武汉
社区版块
存档分类
最新评论

YII console 定时脚本

 
阅读更多

可以用来做定时程序通过命令运行代码,非url访问方式更安全

linux/macos 上使用yiic配置(window上使用yiic.bat)

1.yiic要有执行权限,chmod -R 777 yiic

2.yiic用的PHP,需要指定PHP的正确路径:

#!/usr/bin/env php会自动的在你的用户PATH变量中所定义的目录中寻找php来执行的。

用vi打开yiic,把“#!/usr/bin/env php” 改为“#!/usr/local/php/bin/php(也就是你php路径)

也可以>/usr/local/bin/php yiic

 

1.yiic 命令用到的是yiic.php,也可以直接用yiic.php
2.控制台的命令配置文件是应用的protected/config/console.php文件,

<?php
define('ROOT_PATH' , "/Users/apple/development/pyq_tuiguang/");

$yii    = '/sites/www/yii/framework/yiic.php';
$config = ROOT_PATH . 'protected/config/console.php';

require_once($yii);
Yii::createWebApplication($config)->run();

系统默认的路径是protected/commands/shell 如果你执行单一的任务,直接在run方法里面写,另外一种就是同写你的Controller(控制器),前面增加actionXXX

protected/extensions/clean_command/ECleanCommand.php

<?php
class ECleanCommand extends CConsoleCommand
{
	public $webRoot = null;
	public function getHelp()
	{
		$out = "Clean command allows you to clean up various temporary data Yii and an application are generating.\n\n";
		return $out.parent::getHelp();
	}
	public function actionCache()
	{
		$cache=Yii::app()->getComponent('cache');
		if($cache!==null){
			$cache->flush();
			echo "Done.\n";
		}
		else {
			echo "Please configure cache component.\n";
		}
	}
	public function actionAssets()
	{
		if(empty($this->webRoot))
		{
			echo "Please specify a path to webRoot in command properties.\n";
			Yii::app()->end();
		}
		$this->cleanDir($this->webRoot.'/assets');
		echo "Done.\n";
	}
	public function actionRuntime()
	{
		$this->cleanDir(Yii::app()->getRuntimePath());
		echo "Done.\n";
	}
	private function cleanDir($dir)
	{
		$di = new DirectoryIterator ($dir);
		foreach($di as $d)
		{
			if(!$d->isDot())
			{
				echo "Removed ".$d->getPathname()."\n";
				$this->removeDirRecursive($d->getPathname());
			}
		}
	}
	private function removeDirRecursive($dir)
	{
		$files = glob($dir.'*', GLOB_MARK);
		foreach ($files as $file)
		{
			if (is_dir($file))
			$this->removeDirRecursive($file);
			else
			unlink($file);
		}
		if (is_dir($dir))
		rmdir($dir);
	}
}

 console.php,commandMap配置后不需要指定yiic shell index.php

<?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( //可以使用model等
        'application.models.*',
        'application.components.*',
    ),
    'components'=>array( 
        'db'=>require(dirname(__FILE__) . '/db.php')
    ),
    'commandMap' => array(
        'clean' => array(
            'class' => 'ext.clean_command.ECleanCommand',
            'webRoot' => 'E:\Apache2\htdocs\webapp', //注意修改 class::webRoot
        ),
        'rbac' => array(
            'class' => 'application.commands.shell.RbacCommand',
        )
    ),
);

命令行运行cd E:\Apache2\htdocs\webapp\protected\ 进入yiic.php的目录

yiic clean

Usage: E:\Apache2\htdocs\webapp\protected\yiic.php clean <action>
Actions:
    cache
    assets
    runtime

yiic.php clean cache
yiic clean assets

E:\Apache2\htdocs\webapp\protected>yiic clean assets
Removed E:\Apache2\htdocs\webapp/assets\1f5cfc05
Removed E:\Apache2\htdocs\webapp/assets\836290cc
Done.

yiic clean runtime

单一任务

<?php
class TestCommand extends CConsoleCommand
{
	public function getHelp()
	{
        //php.exe crons.php help test
	    return '这里显示命令的帮助信息';
	}

	/**
	 * Execute the action.
	 * @param array command line parameters specific for this command
	 */
	public function run($args)
	{
		if(!isset($args[0]))
			$this->usageError('请输入参数.');
		echo('你输入的参数是 :\n');
		var_dump($args);
		return 1; #必须返回数字
	}
}

 /www/yii_dev/testwebap/protected/ yiic test p1 p2 p3
你输入的参数是 :\narray(3) {
  [0]=>string(2) "p1"
  [1]=>string(2) "p2"
  [2]=>string(2) "p3"
}

yii  crontab 作业方法

yii consolecommand 控制台命令,实现定时任务。当然,这得结合系统,如XP的计划任务,linux的crontab命令 打开你的linux命令窗口,创建自动任务。至于windows系统 ,是计划任务(win系统,可以谷歌如何操作),下面只讲linux系统。

crontab -e
##然后输入
1 * * * *  php /具体地址/protected/yiic.php Test >>/具体地址/protected/commands/test.log

'CException' with message 'Property "CConsoleApplication.user" is not defined.' 在console程序中不能用CWebUser,shell程序中调用到Yii::app()->user会报错

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
分享到:
评论

相关推荐

    yii2 console 集成swoole 执行异步任务,例如注册邮件,发送短信

    在Web开发中,Yii2 Console组件常用于处理后台任务,如定时任务、数据迁移等。然而,对于需要即时响应或者非阻塞操作的任务,如注册邮件发送、短信通知等,我们可以利用Swoole扩展来实现异步处理,从而提高系统效率...

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

    在上面的代码中,`$yii`变量指向了Yii的入口脚本,`$configFile`则指定了控制台应用的配置文件。`Yii::createConsoleApplication()`函数用于创建并运行控制台应用,它会加载配置文件,并执行我们在其中定义的命令。 ...

    Yii2.0高级应用模板

    - `console`:用于命令行接口(CLI)应用,如定时任务、数据库迁移等。 - `frontend`:前端用户界面,直接与用户交互的部分。 - `backend`:后端管理界面,通常用于管理员操作。 - `vendor`:存放第三方库和Yii框架...

    yii-advanced-app-2.0.35.tgz

    4. `console/`:这个目录包含了命令行接口(CLI)的控制器和脚本,用于执行定时任务或数据库迁移等非交互式操作。 5. `config/`:存储所有配置文件,如数据库连接、路由规则、组件设置等。 6. `vendor/`:这里是...

    Yii框架创建cronjob定时任务的方法分析

    Yii框架创建定时任务的主要方法涉及到Yii框架中的命令行工具Console的应用,以及cronjob的创建和使用。以下将详细介绍这些方面的知识点。 首先,了解Yii框架的基础概念是必要的。Yii框架是一个高级的、用于Web应用...

    YII2框架使用控制台命令的方法分析

    在YII2框架中,控制台命令是一个重要的组成部分,它可以方便地执行后台任务,比如定时运行脚本、数据处理等。这篇文章详细介绍了如何在YII2框架中使用控制台命令,并且通过实例展示了相关的步骤、原理和操作技巧。 ...

    Yii使用migrate命令执行sql语句的方法

    关于Yii框架的其他知识点,例如,你可以学习如何创建和使用控制台命令(console commands),这对于实现后台任务,如定时任务,非常实用。还有Yii的RBAC(Role-Based Access Control)功能,它能帮助你实现对用户...

    yii2.0.chm版手册

    4. **Console Commands**:提供命令行工具,方便执行后台任务,如定时任务、迁移等。 综上所述,Yii 2.0.chm 手册涵盖了框架的基本概念、组件、数据库操作、错误处理、国际化等多个方面,对于深入理解和高效开发 ...

    从零开始学YII2框架(六)高级应用程序模板

    - `console`:控制台程序,用于执行定时任务等 - `environments`:环境配置目录 - `frontend`:前台Web程序 - `.gitignore`:Git版本控制系统中忽略的文件和目录 - `composer.json`:项目依赖及配置 - `init`:初始...

    php中实现进程锁与多进程的方法

    在Yii2框架中实现多进程的进程锁,需要继承Yii的Console控制器,并在crontab中使用Yii自带的命令执行定时脚本。Yii2的Console控制器提供了参数传递的功能,使得进程锁的使用更加方便。进程锁的实现代码与单进程中的...

Global site tag (gtag.js) - Google Analytics