第一次安装系统后要做些优化,然后不希望执行第二次。所以写一个脚本,然后将自身删掉,防止二次运行。
bash shell里在最后写 rm -rf $0 即可。
第一次安装系统后要做些优化,然后不希望执行第二次。所以写一个脚本,然后将自身删掉,防止二次运行。
bash shell里在最后写 rm -rf $0 即可。
之前的日志切割都是根据项目需要写的所以比较分散。现在把脚本整合到一个里面。为了能适应更多的系统还是用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
使用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
在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
需要产生0到FF的目录
#!/bin/bash for (( a=0 ; a<256 ; a++ )); do b=`echo ""$a" 16 o p" | dc`;echo $b; mkdir $b done