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
8月 03

bash 产生随机数

  使用bash产生n位的随机数。测试中为产生8位。

#!/bin/bash
# -------------------------------
# Filename:    test.sh
# Revision:    1.0
# Date:        2013-08-01
# Author:      simonzhang
# Email:       simon-zzm@163.com
# Description: 
# -------------------------------

function randnum()
{
    di=(0 1 2 3 4 5 6 7 8 9 \
        a b c d e f g h i j k l m n o p q r s t u v w x y z \
        A B C D E F G H I G K L M N O P Q R S T U V W X Y Z \
        ~ ! ^ _)
    for(( i=0; i<$1; i++))
    do
        num=$num`echo -n ${di[$RANDOM % ${#di[*]}]}`
    done
    echo $num
}

get=$(randnum 8)
echo $get

bash产生n位随机数

8月 02

linux远程通过ssh启停tomcat

  在linux上远程通过ssh启停tomcat,因为存在环境变量加载问题,所以写一个shell脚本,放在tomcat的bin目录下。CentOS测试通过。需要使用bash。因为脚本中包含脚本名字,在查找时要过滤掉自己,所以如果需要修改脚本名字,在脚本内也要相应的修改。

#!/bin/bash
# -------------------------------------------------------------------------------
# Filename:    tomcatcomm.sh
# Revision:    1.0
# Date:        2013-7-29
# Author:      simonzhang
# Email:       simon-zzm@163.com
# Description: 
# -------------------------------------------------------------------------------
# Source function library.
. /etc/init.d/functions
source /etc/profile

#### shell env
path=$(dirname $0)
if [ ${path:0:1} == . ]; then
   path=${path/./$(pwd)}
fi
my_name="tomcatcomm.sh"

###### delete tomcat`s work dir and startup server
del_start()
{
    /bin/rm -rf ${1}work/*
}

######main()
case "$1" in
  start)
       get_pid_count=`/bin/ps -ef|grep -v grep|grep -v ${my_name}|grep ${path}|wc -l`
       if [ ${get_pid_count} -gt 0 ] ; then
          /bin/ps -ef|grep -v grep|grep -v ${my_name}|grep ${path}|awk ' ''{print $2}'|xargs kill -9
          sleep 1
          get_pid_count=`/bin/ps -ef|grep -v grep|grep -v ${my_name}|grep ${path}|wc -l`
           if [ ${get_pid_count} -gt 0 ] ; then
              echo "Error"
           else
              del_start ${path}
              ${path}/startup.sh
           fi
        else
            del_start ${path}
            ${path}/startup.sh
        fi
        ;;
  stop)
        ${path}/shutdown.sh
        del_start ${path}
        sleep 1
        ;;
  restart)
	$0 stop
	$0 start
	;;
  *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 1
esac

tomcat远程启停脚本