Archive for September, 2012

作者:AngryFox 分类: Uncategorized September 23rd, 2012 暂无评论
<?php
 /*
   redis 操作类,适用于单台或多台、多组redis服务器操作

   使用方法:
   1、$rs=new mz_redis();$rs->load_config_file('redis_config1.php');$www=$rs->connect(1,true,0)==单台读连接,
   连接read_array第一个元素对应的redis服务器中的随机一台;$rs->get($www[0],'abc'),获取$www连接对象里的'abc'key的值。
   2、$rs=new mz_redis();$rs->load_config_file('redis_config2.php');$www=$rs->connect(1,true,1)==单台读连接,
   连接read_array第二个元素对应的redis服务器中的随机一台
   3、$rs=new mz_redis();$rs->load_config_file('redis_config3.php');$www=$rs->connect(1,false,0)==多台读连接,
   连接read_array每一个元素对应的redis服务器中的随机一台;数组形式的连接对象$www,需要循环去操作,与第一种方式有所区别
   4、$rs=new mz_redis();$rs->load_config_file('redis_config4.php');$www=$rs->connect(2,false,0)==多台写连接,
   连接write_array每一个元素对应的redis服务器
   5、$rs=new mz_redis();$rs->load_config_file('redis_config5.php');$www=$rs->connect(2,true,0)==单台写连接,
   连接write_array第一个元素对应的redis服务器
   注意:$www是数组,redis有很多操作方法,本类并未完全包括,简单的都可以自己扩展,这个类主要“单台或多台、
   多组redis服务器连接操作”
 */

class pub_redis{

    private $read_link=array();   // 一维数组读资源
    private $write_link=array();  // 一维数组写资源

    private $read_array=array();  // 二维数组
    private $write_array=array(); // 二维数组

    /*
     * 构造函数
    */
    public function __construct(){

        if (!extension_loaded('redis')) {
            exit('服务器不支持redis扩展');
        }

    }

    /*
     * 初始化 redis 读写配置数组,都是二维数组
     * 不能业务类型的redis应用,配置到不同的文件中
     * 切换不同业务类型redis的连接,只需要执行本方法导入不同的redis配置文件,然后connect()
    */
    public function load_config_file($redis_config_file='redis_config1.php'){

        require_once($redis_config_file);
        $this->read_array=$read_array;
        $this->write_array=$write_array;
        $read_array=$write_array=null;

    }

    /*
     * 连接函数,redis链接入口
     * $single==true,单台操作 ; false就是多台操作
     * type==1:read ; type==2:write
     * $index,单台操作,指定操作某一台,数组的索引
     * 返回redis链接资源,一维数组形式,下标为从0开始的数字
    */
    public function connect($type=1,$single=true,$index=0){ 

        if($type==1){
            if($single){
                $idx=array_rand($this->read_array[$index]);
                $data=array(array($this->read_array[$index][$idx]));
            }
            else{
                $data=array();
                foreach($this->read_array as $key=>$val){
                    $idx=array_rand($val);
                    $data[]=array($this->read_array[$key][$idx]);
                }
            }
            $this->mz_connect($data,$this->read_link,$single,$index);
            $rs=$this->read_link;
        }
        else if($type==2){
            $this->mz_connect($this->write_array,$this->write_link,$single,$index);
            $rs=$this->write_link;
        }
        else{
            exit('参数错误');
        }

        sort($rs);
        return $rs;

    }

    /*
     * 连接资源数组化
    */
    public function mz_connect($array,&$link,$single,$index){
        if($single){
            if(!isset($link[$array[$index]['ip']]) || $link[$array[$index]['ip']]===false){
                $link[$array[$index]['ip']]=$this->do_connect($array[$index]['ip'],$array[$index]['pwd'],$array[$index]['port'],$array[$index]['time_out'],$array[$index]['db']);
            }
        }
        else{
            $num=count($array);
            for($i=0;$i<$num;++$i){
                $index=array_rand($array);
                if(!isset($link[$array[$index]['ip']]) || $link[$array[$index]['ip']]===false){
                    $link[$array[$index]['ip']]=$this->do_connect($array[$index]['ip'],$array[$index]['pwd'],$array[$index]['port'],$array[$index]['time_out'],$array[$index]['db']);
                }
                unset($array[$index]);
            }
        }
    }

    /*
     * 连接函数,执行连接
     * 连接redis与选择数据库,并确认是否可以正常连接,连接不上就返回false
    */
    public function do_connect($ip,$pwd='',$port=6379,$time_out=0.3,$db=1){

        $redis = new Redis();
        try {
            $redis->connect($ip,$port,$time_out);
            if($pwd!=''){
                $redis->auth($pwd);
            }
            $redis->select($db);

        } catch (Exception $e) {
            $redis=false;
        }
        return $redis;
    }

    /*
     * 判断key是否存在
     * $obj redis连接对象
    */
    public function key_exists($obj,$key){
        return $obj->exists($key);
    }

    /*
     * 判断key剩余有效时间,单位秒
     * $obj redis连接对象
    */
    public function get_ttl($obj,$key){
        return $obj->ttl($key);
    }

    /*
     * 获取字符串对象
     * $obj redis连接对象
    */
    public function get($obj,$key){
        return json_decode($obj->get($key));
    }

    /*
     * 设置字符串,带生存时间
     * $obj redis连接对象
    */
    public function set($obj,$key,$time,$value){
        $str=json_encode($value);
        return $obj->setex($key,$time,$str);
    }

    /*
     * 设置锁
     * $obj redis连接对象
     * $str, 字符串
    */
    public function set_lock($obj,$key,$value){
        return $obj->setnx($key,$value);
    }

    /*
     * 删除key
     * $obj redis连接对象
    */
    public function delete_key($obj,$key){
        return $obj->delete($key);
    }

    /*
     * 链表增加多个元素
     * $obj redis连接对象
    */
    public function list_add_element($obj,$key,$array,$direction='left'){
        if(!is_array($array)){
            $array=array($array);
        }
        foreach($array as $val){
            ($direction == 'left') ? $obj->lPush($key, json_encode($val)) : $obj->rPush($key, json_encode($val));
        }
    }

    /*
     * 链表弹出多个元素
     * $obj redis连接对象
     * 返回数组
    */
    public function list_pop_element($obj,$key,$num=1,$direction='right') {
        for($i=0;$i<$num;$i++){
           $value = ($direction == 'right') ? $obj->rPop($key) : $obj->lPop($key);
           $data[]=json_decode($value);
        }
        return $data;
    }

    /*
     * 哈希表新增或修改元素
     * $obj redis连接对象
     * $array 关联数组
    */
    public function hash_set($obj,$key,$array){
        if(!$is_array($array)){
            exit('设置哈希表参数异常');
        }
        $obj->hmset($key,$array);
    }

    /*
     * 哈希表读取元素
     * $obj redis连接对象
     * $array 关联数组
    */
    public function hash_get($obj,$key,$array){
        if(!$is_array($array)){
            return $obj->hget($key,$array);
        }
        return $obj->hmget($key,$array);
    }

}

/*
 * 读写redis配置
 * 读写数组下标相同,为主从关系
 */
$write_array=array(
    0=>array('ip'=>'172.16.10.23','port'=>6379,'time_out'=>0.3,'pwd'=>'123456','db'=>1),
	1=>array('ip'=>'172.16.10.23','port'=>6379,'time_out'=>0.3,'pwd'=>'123456','db'=>1)
);

$read_array=array(
    0=>array(
	    array('ip'=>'172.16.10.23','port'=>6379,'time_out'=>0.3,'pwd'=>'654321','db'=>1),
		array('ip'=>'172.16.10.23','port'=>6379,'time_out'=>0.3,'pwd'=>'123456','db'=>1)
	),
	1=>array(
	    array('ip'=>'172.16.10.23','port'=>6379,'time_out'=>0.3,'pwd'=>'5678765','db'=>1),
		array('ip'=>'172.16.10.23','port'=>6379,'time_out'=>0.3,'pwd'=>'345678','db'=>1)
	)
);

/*
 * 读写redis配置
 * 读写数组下标相同,为主从关系
 */
$write_array=array(
    0=>array('ip'=>'172.16.10.23','port'=>6379,'time_out'=>0.3,'pwd'=>'123456','db'=>1),
	1=>array('ip'=>'172.16.10.23','port'=>6379,'time_out'=>0.3,'pwd'=>'123456','db'=>1)
);

$read_array=array(
    0=>array(
	    array('ip'=>'172.16.10.23','port'=>6379,'time_out'=>0.3,'pwd'=>'654321','db'=>1),
		array('ip'=>'172.16.10.23','port'=>6379,'time_out'=>0.3,'pwd'=>'123456','db'=>1)
	),
	1=>array(
	    array('ip'=>'172.16.10.23','port'=>6379,'time_out'=>0.3,'pwd'=>'5678765','db'=>1),
		array('ip'=>'172.16.10.23','port'=>6379,'time_out'=>0.3,'pwd'=>'345678','db'=>1)
	)
);
?>
作者:AngryFox 分类: Uncategorized September 23rd, 2012 暂无评论
<?php
/**
 * 加水印类,支持文字图片水印的透明度设置、水印图片背景透明。
 * 日期:2011-09-27
 * 作者:www.itwhy.org
 * 使用:
 * 		$obj = new WaterMask($imgFileName);			//实例化对象
 * 		$obj->$waterType = 1;						//类型:0为文字水印、1为图片水印
 * 		$obj->$transparent = 45;					//水印透明度
 * 		$obj->$waterStr = 'www.itwhy.org';			//水印文字
 *		$obj->$fontSize = 16;						//文字字体大小
 *		$obj->$fontColor = array(255,0255);			//水印文字颜色(RGB)
 *		$obj->$fontFile = = 'AHGBold.ttf';			//字体文件
 *		$obj->output();								//输出水印图片文件覆盖到输入的图片文件
 */
class WaterMask{
	public  $waterType			= 1;				//水印类型:0为文字水印、1为图片水印
	public  $pos				= 0;				//水印位置
	public  $transparent		= 45;				//水印透明度

	public  $waterStr			= 'www.itwhy.org';	//水印文字
	public  $fontSize			= 16;				//文字字体大小
	public  $fontColor			= array(255,0,255);	//水印文字颜色(RGB)
	public  $fontFile			= 'AHGBold.ttf';	//字体文件

	public  $waterImg			= 'logo.png';		//水印图片

	private $srcImg				= '';				//需要添加水印的图片
	private $im					= '';				//图片句柄
	private $water_im			= '';				//水印图片句柄
	private $srcImg_info		= '';				//图片信息
	private $waterImg_info		= '';				//水印图片信息
	private $str_w				= '';				//水印文字宽度
	private $str_h				= '';				//水印文字高度
	private $x					= '';				//水印X坐标
	private $y					= '';				//水印y坐标

	function __construct($img) {		//析构函数
		$this->srcImg = file_exists($img) ? $img : die('"'.$img.'" 源文件不存在!');
	}
	private function imginfo() {				//获取需要添加水印的图片的信息,并载入图片。
		$this->srcImg_info = getimagesize($this->srcImg);
		switch ($this->srcImg_info[2]) {
			case 3:
				$this->im = imagecreatefrompng($this->srcImg);
				break 1;
			case 2:
				$this->im = imagecreatefromjpeg($this->srcImg);
				break 1;
			case 1:
				$this->im = imagecreatefromgif($this->srcImg);
				break 1;
			default:
				die('原图片('.$this->srcImg.')格式不对,只支持PNG、JPEG、GIF。');
		}
	}
	private function waterimginfo() {			//获取水印图片的信息,并载入图片。
		$this->waterImg_info = getimagesize($this->waterImg);
		switch ($this->waterImg_info[2]) {
			case 3:
				$this->water_im = imagecreatefrompng($this->waterImg);
				break 1;
			case 2:
				$this->water_im = imagecreatefromjpeg($this->waterImg);
				break 1;
			case 1:
				$this->water_im = imagecreatefromgif($this->waterImg);
				break 1;
			default:
				die('水印图片('.$this->srcImg.')格式不对,只支持PNG、JPEG、GIF。');
		}
	}
	private function waterpos() {				//水印位置算法
		switch ($this->pos) {
			case 0:		//随机位置
				$this->x = rand(0,$this->srcImg_info[0]-$this->waterImg_info[0]);
				$this->y = rand(0,$this->srcImg_info[1]-$this->waterImg_info[1]);
				break 1;
			case 1:		//上左
				$this->x = 0;
				$this->y = 0;
				break 1;
			case 2:		//上中
				$this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;
				$this->y = 0;
				break 1;
			case 3:		//上右
				$this->x = $this->srcImg_info[0]-$this->waterImg_info[0];
				$this->y = 0;
				break 1;
			case 4:		//中左
				$this->x = 0;
				$this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;
				break 1;
			case 5:		//中中
				$this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;
				$this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;
				break 1;
			case 6:		//中右
				$this->x = $this->srcImg_info[0]-$this->waterImg_info[0];
				$this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;
				break 1;
			case 7:		//下左
				$this->x = 0;
				$this->y = $this->srcImg_info[1]-$this->waterImg_info[1];
				break 1;
			case 8:		//下中
				$this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;
				$this->y = $this->srcImg_info[1]-$this->waterImg_info[1];
				break 1;
			default:	//下右
				$this->x = $this->srcImg_info[0]-$this->waterImg_info[0];
				$this->y = $this->srcImg_info[1]-$this->waterImg_info[1];
				break 1;
		}
	}
	private function waterimg() {
		if ($this->srcImg_info[0] <= $this->waterImg_info[0] || $this->srcImg_info[1] <= $this->waterImg_info[1]){
			die('水印比原图大!');
		}
		$this->waterpos();
		$cut = imagecreatetruecolor($this->waterImg_info[0],$this->waterImg_info[1]);
		imagecopy($cut,$this->im,0,0,$this->x,$this->y,$this->waterImg_info[0],$this->waterImg_info[1]);
		$pct = $this->transparent;
		imagecopy($cut,$this->water_im,0,0,0,0,$this->waterImg_info[0],$this->waterImg_info[1]);
		imagecopymerge($this->im,$cut,$this->x,$this->y,0,0,$this->waterImg_info[0],$this->waterImg_info[1],$pct);
	}
	private function waterstr() {
		$rect = imagettfbbox($this->fontSize,0,$this->fontFile,$this->waterStr);
		$w = abs($rect[2]-$rect[6]);
		$h = abs($rect[3]-$rect[7]);
		$fontHeight = $this->fontSize;
		$this->water_im = imagecreatetruecolor($w, $h);
		imagealphablending($this->water_im,false);
		imagesavealpha($this->water_im,true);
		$white_alpha = imagecolorallocatealpha($this->water_im,255,255,255,127);
		imagefill($this->water_im,0,0,$white_alpha);
		$color = imagecolorallocate($this->water_im,$this->fontColor[0],$this->fontColor[1],$this->fontColor[2]);
		imagettftext($this->water_im,$this->fontSize,0,0,$this->fontSize,$color,$this->fontFile,$this->waterStr);
		$this->waterImg_info = array(0=>$w,1=>$h);
		$this->waterimg();
	}
	function output() {
		$this->imginfo();
		if ($this->waterType == 0) {
			$this->waterstr();
		}else {
			$this->waterimginfo();
			$this->waterimg();
		}
		switch ($this->srcImg_info[2]) {
			case 3:
				imagepng($this->im,$this->srcImg);
				break 1;
			case 2:
				imagejpeg($this->im,$this->srcImg);
				break 1;
			case 1:
				imagegif($this->im,$this->srcImg);
				break 1;
			default:
				die('添加水印失败!');
				break;
		}
		imagedestroy($this->im);
		imagedestroy($this->water_im);
	}
}
?>
作者:AngryFox 分类: Uncategorized September 23rd, 2012 暂无评论
<?php
/*
 * 中文圆形印章类
 * @example:
 * 	$seal = new circleSeal('你我他坐站走东西南北中',75,6,24,0,0,16,40);
 *	$seal->doImg();
 */

class circleSeal {
	private $sealString;	//印章字符
	private $strMaxLeng;	//最大字符长度
	private $sealRadius;	//印章半径
	private $rimWidth;		//边框厚度
	private $innerRadius;	//内圆半径
	private $startRadius;	//五角星半径
	private $startAngle;	//五角星倾斜角度
	private $backGround;	//印章颜色
	private $centerDot;		//圆心坐标
  	private $img;        	//图形资源句柄
  	private $font;        	//指定的字体
  	private $fontSize;    	//指定字体大小
	private $width;			//图片宽度
	private $height;		//图片高度
	private $points;		//五角星各点坐标
	private $charRadius;	//字符串半径
	private $charAngle;		//字符串倾斜角度
	private $spacing;		//字符间隔角度

	//构造方法
	public function __construct($str ='', $rad = 75, $rmwidth = 6, $strad = 24, $stang = 0, $crang = 0, $fsize = 16, $inrad =0){
		$this->sealString	= empty($str) ? '印章测试字符串' : $str;
		$this->strMaxLeng	= 12;
		$this->sealRadius	= $rad;
		$this->rimWidth		= $rmwidth;
		$this->startRadius	= $strad;
		$this->startAngle	= $stang;
		$this->charAngle	= $crang;
		$this->centerDot	= array('x'=>$rad, 'y'=>$rad);
		$this->font			= dirname(__FILE__) .'/simkai.ttf';
		$this->fontSize		= $fsize;
		$this->innerRadius	= $inrad;	//默认0,没有
		$this->spacing		= 1;
	}

	//创建图片资源
	private function createImg(){
		$this->width		= 2 * $this->sealRadius;
		$this->height		= 2 * $this->sealRadius;
		$this->img			= imagecreate($this->width, $this->height);
		imagecolorresolvealpha($this->img,255,255,255,127);
		$this->backGround	= imagecolorallocate($this->img,255,0,0);
	}

	//画印章边框
	private function drawRim(){
		for($i=0;$i<$this->rimWidth;$i++){
			imagearc($this->img,$this->centerDot['x'],$this->centerDot['y'],$this->width - $i,$this->height - $i,0,360,$this->backGround);
		}
	}

	//画内圆
	private function drawInnerCircle(){
		imagearc($this->img,$this->centerDot['x'],$this->centerDot['y'],2*$this->innerRadius,2*$this->innerRadius,0,360,$this->backGround);
	}

	//画字符串
	private function drawString(){
		//编码处理
		$charset = mb_detect_encoding($this->sealString);
		if($charset != 'UTF-8'){
			$this->sealString = mb_convert_encoding($this->sealString, 'UTF-8', 'GBK');
		}

		//相关计量
		$this->charRadius = $this->sealRadius - $this->rimWidth - $this->fontSize;	//字符串半径
		$leng	= mb_strlen($this->sealString,'utf8');	//字符串长度
		if($leng > $this->strMaxLeng) $leng = $this->strMaxLeng;
		$avgAngle	= 360 / ($this->strMaxLeng);	//平均字符倾斜度

		//拆分并写入字符串
		$words	= array();	//字符数组
		for($i=0;$i<$leng;$i++){
			$words[] = mb_substr($this->sealString,$i,1,'utf8');
			$r = 630 + $this->charAngle + $avgAngle*($i - $leng/2) + $this->spacing*($i-1);		//坐标角度
			$R = 720 - $this->charAngle + $avgAngle*($leng-2*$i-1)/2 + $this->spacing*(1-$i);	//字符角度
			$x = $this->centerDot['x'] + $this->charRadius * cos(deg2rad($r));	//字符的x坐标
			$y = $this->centerDot['y'] + $this->charRadius * sin(deg2rad($r));	//字符的y坐标
			imagettftext($this->img, $this->fontSize, $R, $x, $y, $this->backGround, $this->font, $words[$i]);
		}
	}	

	//画五角星
	private function drawStart(){
		$ang_out = 18 + $this->startAngle;
		$ang_in  = 56 + $this->startAngle;
		$rad_out = $this->startRadius;
		$rad_in	 = $rad_out * 0.382;
		for($i=0;$i<5;$i++){
			//五个顶点坐标
			$this->points[] = $rad_out * cos(2*M_PI/5*$i - deg2rad($ang_out)) + $this->centerDot['x'];
			$this->points[] = $rad_out * sin(2*M_PI/5*$i - deg2rad($ang_out)) + $this->centerDot['y'];

			//内凹的点坐标
			$this->points[] = $rad_in * cos(2*M_PI/5*($i+1) - deg2rad($ang_in)) + $this->centerDot['x'];
			$this->points[] = $rad_in * sin(2*M_PI/5*($i+1) - deg2rad($ang_in)) + $this->centerDot['y'];
		}
		imagefilledpolygon($this->img, $this->points, 10, $this->backGround);
	}

	//输出
	private function outPut(){
		header('Content-type:image/png');
   		imagepng($this->img);
   		imagedestroy($this->img);
  	}

	//对外生成
	public function doImg(){
		$this->createImg();
		$this->drawRim();
		$this->drawInnerCircle();
		$this->drawString();
		$this->drawStart();
		$this->outPut();
	}
}
作者:AngryFox 分类: Uncategorized September 23rd, 2012 暂无评论
1。随机生成整数函数(生成位数:$pw_length)

public function randk($pw_length)
    {
      $randpwd = '';
        for ($i=0;$i<$pw_length;$i++)
        {
            $randpwd .= chr(mt_rand(48,57));
        }
        return $randpwd;
    }

2。请求罗列各种方法

file_get_contents

$url="http://www.test.com/ssl/...";

$opts  = array(
                        'http'=>array(
                            'timeout' => 25,
                            'method'  => "GET",
                            'header'  => "Accept-language: en\r\n" .
                                         "Cookie: foo=bar\r\n",
                        )
                );
 $context = stream_context_create($opts);
 $xmlstr  = file_get_contents($url,false,$context);
 $xmlstr  = trim($xmlstr);

curl---

function cuel_get_contents($url,$timeout=1) {
  $curlHandle = curl_init();
  curl_setopt( $curlHandle , CURLOPT_URL, $url );
  curl_setopt( $curlHandle , CURLOPT_RETURNTRANSFER, 1 );
  curl_setopt( $curlHandle , CURLOPT_TIMEOUT, $timeout );
  $result = curl_exec( $curlHandle );
  curl_close( $curlHandle );
  return $result;
}
$hx =cuel_get_contents('http://www.test.com');

《方法3.》

$url="http://www.test.com/ssl/...";

echo "<meta http-equiv='refresh' content='0;URL=".$url."'>";
作者:AngryFox 分类: Uncategorized September 11th, 2012 暂无评论
1. 请求接口(GET):

http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串]

2. 响应信息:

(json格式的)国家 、省(自治区或直辖市)、市(县)、运营商

3. 返回数据格式:
{"code":0,"data":{"ip":"210.75.225.254","country":"\u4e2d\u56fd","area":"\u534e\u5317",
"region":"\u5317\u4eac\u5e02","city":"\u5317\u4eac\u5e02","county":"","isp":"\u7535\u4fe1",
"country_id":"86","area_id":"100000","region_id":"110000","city_id":"110000",
"county_id":"-1","isp_id":"100017"}}
其中code的值的含义为,0:成功,1:失败。

4.有道的ip:

http://www.youdao.com/smartresult-xml/search.s?type=ip&q=22.21.50.222

5.盛大IP库

http://ipquery.sdo.com/getipinfo.php?ip=120.85.69.115
作者:AngryFox 分类: Uncategorized September 11th, 2012 暂无评论

为当前用户创建cron服务
1. 键入 crontab -e 编辑crontab服务文件
例如 文件内容如下:
*/2 * * * * /bin/sh /home/admin/jiaoben/buy/deleteFile.sh
保存文件并并退出
*/2 * * * * /bin/sh /home/admin/jiaoben/buy/deleteFile.sh
*/2 * * * * 通过这段字段可以设定什么时候执行脚本
/bin/sh /home/admin/jiaoben/buy/deleteFile.sh 这一字段可以设定你要执行的脚本,这里要注意一下bin/sh 是指运行 脚本的命令 后面一段时指脚本存放的路径

2. 查看该用户下的crontab服务是否创建成功, 用 crontab -l 命令

3. 启动crontab服务
一般启动服务用 /sbin/service crond start 若是根用户的cron服务可以用 sudo service crond start, 这里还是要注意 下 不同版本linux系统启动的服务的命令也不同 ,像我的虚拟机里只需用 sudo service cron restart 即可,若是在根用下直接键入service cron start就能启动服务

4. 查看服务是否已经运行用 ps -ax | grep cron
5. crontab命令
cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
  crontab -l //列出某个用户cron服务的详细内容
  crontab -r //删除没个用户的cron服务
  crontab -e //编辑某个用户的cron服务
  比如说root查看自己的cron设置:crontab -u root -l
  再例如,root想删除fred的cron设置:crontab -u fred -r
  在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e
  进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt
任务调度的crond常驻命令
crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此
任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工
作便会自动执行该工作。

6. crontab命令选项:
-u指定一个用户
-l列出某个用户的任务计划
-r删除某个用户的任务
-e编辑某个用户的任务
7. cron文件语法:
分 小时 日 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command (取值范围,0表示周日一般一行对应一个任务)
记住几个特殊符号的含义:
“*”代表取值范围内的数字,
“/”代表”每”,
“-”代表从某个数字到某个数字,
“,”分开几个离散的数字
8. 任务调度设置文件的写法
可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件
具体格式如下:
Minute Hour Day Month Dayofweek command
分钟 小时 天 月 天每星期 命令
每个字段代表的含义如下:
Minute 每个小时的第几分钟执行该任务
Hour 每天的第几个小时执行该任务
Day 每月的第几天执行该任务
Month 每年的第几个月执行该任务
DayOfWeek 每周的第几天执行该任务
Command 指定要执行的程序
在这些字段里,除了“Command”是每次都必须指定的字段以外,其它字段皆为可选
字段,可视需要决定。对于不指定的字段,要用“*”来填补其位置。
举例如下:
5 * * * * ls 指定每小时的第5分钟执行一次ls命令
30 5 * * * ls 指定每天的 5:30 执行ls命令
30 7 8 * * ls 指定每月8号的7:30分执行ls命令
30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令
30 6 * * 0 ls 指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,
以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]
30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]
25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]
*/15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令。 ]
每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件
50 7 * * * root run-parts /etc/cron.daily [ 注:run-parts参数表示,执行后面目录中的所有可执行文件。 ]

9. 新增调度任务
新增调度任务可用两种方法:
1)、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。
2)、直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。
10. 查看调度任务
crontab -l //列出当前的所有调度任务
crontab -l -u jp //列出用户jp的所有调度任务
11. 删除任务调度工作
crontab -r //删除所有任务调度工作
12. 任务调度执行结果的转向
例1:每天5:30执行ls命令,并把结果输出到/jp/test文件中
30 5 * * * ls >/jp/test 2>&1
注:2>&1 表示执行结果及错误信息。
编辑/etc/crontab 文件配置cron
cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次 /etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式是:
  SHELL=/bin/bash
  PATH=/sbin:/bin:/usr/sbin:/usr/bin
  MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
  HOME=/ //使用者运行的路径,这里是根目录
  # run-parts
  01 * * * * root run-parts /etc/cron.hourly //每小时执行
/etc/cron.hourly内的脚本
  02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行 /etc/cron.weekly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本
  大家注意”run-parts”这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了
例如:
1) 在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。
2)直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务
11 2 21 10 * rm -rf /mnt/fb

使用 crontab 服务可以创建定时任务。

1、查看crontab服务是否启动,
root@oracle lhq]# service crond status;
2、启动crontab服务
[root@oracle lhq]# service crond start
Starting crond: [ OK ]
3、查看已经存在的定时任务
[root@oracle lhq]# crontab -l
25 14 * * * mkdir /lhq/test
[root@oracle lhq]#
4、添加定时任务
[root@oracle lhq]# crontab -e
定时任务的格式:
分 小时 日 月 星期 命令(取值范围,0表示周日,*表任意一天,一般一行对应一个任务)
0-59 0-23 1-31 1-12 0-6 command
0 0 * * * ntpdate asia.pool.ntp.org
5. 任务添加后,再查看已经存在的定时任务
[root@oracle lhq]# crontab -l

作者:AngryFox 分类: Uncategorized September 7th, 2012 暂无评论

我的linux系统:centos5.5
安装Mysql-python模块 yum install MySQL-python
我要升级的版本是:2.7.3

升级python的步骤

参考资料如下:

http://liluo.org/2010/08/centos-5-5-%E4%B8%AD-python-%E5%8D%87%E7%BA%A7%E5%88%B0-2-6-5/

1、下载
wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2
2、解压
tar jxvf Python-2.7.3.tar.bz2
3、编译安装
cd Python-2.7.3
./configure
make && make install
Python 默认安装目录在/usr/local/lib/python2.7
查看一下刚才安装的版本 /usr/local/bin/python -V,看到了 2.7.3 吧
4、更改系统默认版本
之前查看版本使用 /usr/local/lib/python2.7 -V,现在来把系统默认的Python指向刚才安装的Python2.6。
(如果有人问为什么不把2.4.3卸载呢?呃,貌似网上有讲yum是基于2.4.3,所以我也就没那样折腾)
mv /usr/bin/python /usr/bin/python.bak
ln -s /usr/local/bin/python2.7 /usr/bin/python
敲入 python -V 查看是否成功。
5、修复不能正常工作的yum
在完成了上面4步之后,如果有使用yum的话会发现出错,这是因为yum 依赖2.4.3而现在默认的 Python 版本是 2.7.3 。
vim /usr/bin/yum
将首行显示的 !#/usr/bin/python 修改为 !#/usr/bin/python2.4

我的建议是:无需这样做,如果需要同时使用多个版本的话,就不得不进行多次设置,我的建议是,根据不同的版本在python加上对应的版本号(原因是:我是用来学习python和测试用的)

作者:AngryFox 分类: Uncategorized September 5th, 2012 暂无评论

编辑 /etc/php-fpm.conf 开启

    <value name="request_slowlog_timeout">3s</value> 

    The log file for slow requests
    <value name="slowlog">/var/log/php-fpm.log.slow</value>

1、出现异常php文件执行慢,查看内容,和开发共同确定代码文件。若之前有md5入库,可以对这个生产md5 再比对。查出是否是增加或修改的文件。

2、这个可作为php 代码优化的参考依据。