2月 20

切割日志,删除老日志,并列出慢日志

  之前的日志切割都是根据项目需要写的所以比较分散。现在把脚本整合到一个里面。为了能适应更多的系统还是用bash,通用性比较强。
  脚本可以用于切割mysql、php和tomcat的日志,但是不够严谨。在切割拷贝的时候会丢失很小的一部分,因为比例很小,所以我暂时忽略了。可以统计mysql和php的slow日志。脚本中会将慢日志打印到统一的一个文件中。脚本不涉及慢日志统计文件的发送部分。

#!/sh/bash
# -*- coding:utf-8 -*-
# --------------------------------
# Filename:    
# Revision:    1.0
# Date:        2014-02-18
# Author:      simonzhang
# Email:       simon-zzm@163.com
# --------------------------------

# base setting
# 建议使用绝对路径
base_src=`pwd`
# slow log
# 列出统计的前10条最慢的日志
top=10
# Log deleted 10 days ago
drop_day=10
# log path.
# 如果为空,则跳过此类日志。如果有多处日志,则双引号写多条,以空格分隔。
mysql_log_dir=("/program/mysql4/data" "/program/mysql5/data")
php_log_dir=()
tomcat_log_dir=()
# soft path
mysql_bin='/program/mysql5/bin/'i
# log path
Log_Summary=$base_src\all_log_summary

# start 
# clear old log
date_dir=`date +%Y-%m-%d`
echo ''>$Log_Summary
echo $(get_date)' ''Handle log'>>$Log_Summary
echo '============================='>>$Log_Summary
echo ''>>$Log_Summary

# mysql log 
for (( i=0 ; i<${#mysql_log_dir[@]} ; i++ ))
do
    if [ -f ${mysql_log_dir[i]}\/slow_queries ]; then
        cd ${mysql_log_dir[i]}
        /bin/cp slow_queries  slow_queries_${date_dir}
        /bin/echo '' > slow_queries
        find -ctime +$drop_day -name slow_queries_\*  -exec rm -rf {} \;
        echo ${mysql_log_dir[i]}>>$Log_Summary
        $mysql_bin\mysqldumpslow -t $top -r -s at slow_queries_${date_dir}>>$Log_Summary
        echo '============================='>>$Log_Summary
        echo ''>>$Log_Summary
    fi
done

# php log
for (( i=0 ; i<${#php_log_dir[@]} ; i++ ))
do
    if [ -f ${php_log_dir[i]}\/slow.log ]; then
        cd ${php_log_dir[i]}
        /bin/cp slow.log  slow_${date_dir}.log
        /bin/echo '' > slow.log
        find -ctime +$drop_day -name slow_\*  -exec rm -rf {} \;
        echo ${php_log_dir[i]}>>$Log_Summary
        /bin/cat slow_${date_dir}.log|grep "\/[a-zA-Z].*[0-9]$"|awk ' ''{print $3}'|sort -r |uniq -c|sort -k1 -n -r|head -${top} >> $Log_Summary 
        echo '============================='>>$Log_Summary
        echo ''>>$Log_Summary
    fi
done

# tomcat log
for (( i=0 ; i<${#tomcat_log_dir[@]} ; i++ ))
do
    if [ -f ${tomcat_log_dir[i]}\/catalina.out ]; then
        cd ${tomcat_log_dir[i]}
        /bin/cp catalina.out  catalina_${date_dir}.out
        /bin/echo '' > catalina.out
        find -ctime +$drop_day -name catalina_\*  -exec rm -rf {} \;
    fi
done
1月 27

Raspberry pi 软件模拟PWM

  Raspberry pi 只有一个PWM。看到国外高手有人用软件模拟PWM。我也测试一下。以下部分只是测试记录,文档和代码均来自官方网站。

使用root用户安装softpwm,这个安装记录直接拷贝到系统里运行成功就行。
apt-get -y update
apt-get -y upgrade
apt-get install -y devscripts build-essential fakeroot dh-make mercurial dh-make
apt-get install -y devscripts build-essential fakeroot
mkdir temp
cd temp
hg clone http://hg.code.sf.net/p/raspberry-gpio-python/code raspberry-gpio-python -r 0.5.4
cd raspberry-gpio-python
python setup.py sdist
cd dist/
tar xvfz RPi.GPIO-0.5.4.tar.gz
mv RPi.GPIO-0.5.4 rpi.gpio-0.5.4
cd rpi.gpio-0.5.4
dh_make -s -f ../RPi.GPIO-0.5.4.tar.gz
rm -rf debian
cp -a ../../debian/ ./
debuild -us -uc
debuild clean
python setup.py install

测试代码如下,使用LED小灯测试:

#!/bin/env python
# -*-coding:utf-8 -*-
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(7, GPIO.OUT)

p = GPIO.PWM(7, 50)  #frequency=100Hz
p.start(0)
try:
    while 1:
        for dc in range(0, 101, 5):
            p.ChangeDutyCycle(dc)
            time.sleep(0.1)
        for dc in range(100, -1, -5):
            p.ChangeDutyCycle(dc)
            time.sleep(0.1)
except KeyboardInterrupt:
    pass
p.stop()
GPIO.cleanup()

来源
http://sourceforge.net/p/raspberry-gpio-python/wiki/PWM/

1月 03

测试python计算MD5和CRC的速度

  大量数据想均匀分布到不同的数据库存储,当前方法将key进行MD5或CRC计算,取最后一位分别对应到相应的存储位置。测文本17721088行。
两个脚本如下:
MD5部分

import hashlib
import time

file_list = open('di.txt')
start =time.time()
for get_str in file_list:
    if get_str[-1] == '\n':
        get_str = get_str[:-1]
    get_crc = hashlib.md5(get_str).hexdigest()
    #print get_crc
end = time.time()
print end-start

CRC部分

import zlib
import time

file_list = open('di.txt')
start =time.time()
for get_str in file_list:
    if get_str[-1] == '\n':
        get_str = get_str[:-1]
    get_crc = zlib.crc32(get_str) & 0xffffffff
end = time.time()
print end-start

md5计算用58.81秒,crc计算用27.06秒。CRC速度比md5快一倍。但是MD5是16进制,CRC是十进制。如果要将CRC转为16进制,所用时间和MD5用时相似。

12月 20

linux上用python产生的文件名到window下乱码解决

  linux使用utf-8,用python产生了一批文件,下载到windows上文件名字乱码,内容没有问题。这是由于windows使用GBK,但是能支持utf-8,所以文件名乱码,内容正常。
  解决方法就是把产生的文件在用“GBK”编码重拷贝一次。举例如下:

import os
_name = u"hello"
file_name = "%s.txt" % (get_project)
os.system("mv %s %s" % (file_name, file_name.encode("GBK")))

需要注意:如果文件名字是纯英文或者数字,系统会认为mv是同一个文件,可能会丢失,所以要判断一下。