5月 15

tomcat 日志切割

日志自动切割以前使用cronolog进行,apache为http://www.simonzhang.net/?p=362,tomcat为http://www.simonzhang.net/?p=359。
但是tomcat7 以后启动叫脚本改了,也就不麻烦了,直接自己写个shell解决,此脚本会丢失少量正在切割时产生的日志。

#!/bin/sh
log_dir=("/program/allweb/tomcat_a/logs" "/program/allweb/tomcat/logs")
for (( i=0 ; i<${#log_dir[@]} ; i++ ))
do
    if [ -f ${log_dir[i]}\/catalina.out ]; then
        cd ${log_dir[i]}
        date_dir=`date +%Y-%m-%d`
        /bin/cp catalina.out  catalina_${date_dir}.out
        /bin/echo '' > catalina.out
        /usr/bin/find -ctime +15 -exec rm -rf {} \;
    fi
done
3月 29

shell 判断字符串长度

        需要循环输出一组序列,序列定义为双位数。所以开始的序列要判断一下字符长度。如果变量为h,计算字符串长度为“${#h}”。这个代码代码如下:

#!/bin/sh
for (( h=0 ; h<20 ;h++ ));do
   if (( ${#h} == 1 ));then
      echo '0'$h
   else
      echo $h
   fi
done

输出结果:
# sh 123.sh
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19

3月 29

linux shell 加密

经常使用脚本,但是在脚本中写入密码明文很不安全,所以考虑加密问题。当前比较普遍、简单的方法为使用shc程序
把脚本使用RC4加密算法再编译一次。

shc的主页
http://www.datsi.fi.upm.es/%7Efrosal/
当前最新为http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz

具体操作如下
# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz
# tar zxvf shc-3.8.7.tgz
# cd shc-3.8.7
# make test
# make strings
到此,目录下已经有了shc的程序,可以直接使用,如果希望使用方便也可以在安装一下。
# make install

安装完成,非常简单。使用也非常简单。
# ./shc -v -f myshell.sh
编译完成后会产生两个myshell.sh.x和myshell.sh.x.c。myshell.sh.x为二进制文件,
myshell.sh.x.c为C源码文件。

3月 15

日志 压缩 备份 定时删除脚本

[编写整理:simonzhang 2010-03-15 2012-04-08修改]

  在linux下有大量日志需要压缩备份,并定期清理长期保存的备份日志。对于多处日志存放使用数组进行循环处理。脚本修改好后,设置定时任务即可。

#!/bin/sh
##############################################
# AUTHOR: simonzhang
# back log
# Ver : 1.1 For Production
# description: 
# 2010-03-12  
##############################################
####### set log patch
log_path=("/usr/local/nginx/logs/" "/usr/local/tomcat6/logs/" )
####### set backup log patch
bak_log_path=("/usr/local/nginx/logs/back" "/usr/local/tomcat6/logs/back")

####### set backup  3 day ago log
backupdays=3

#######clear 180 day ago compress log
deletedays=180

#######  start
for (( i=0 ; i<${#log_path[@]} ; i++ ))
do
        cd ${log_path[i]}
    if [ ! -f ${bak_log_path[i]} ] ; then
            /bin/mkdir -p ${bak_log_path[i]}
    fi
        /usr/bin/find  * -ctime +$backupdays -maxdepth 0 -not -name *.pid -not -name error* -exec zip -m {}.zip  {} \;
        /bin/mv *.zip ${bak_log_path[$i]}
        cd ${bak_log_path[$i]}
        echo /usr/bin/find  * -ctime +$deletedays -maxdepth 0 -exec rm {} \;
done
############  end