#!/bin/bash #ver 1.0 by gavin ###指定文件夹大小计算,可以套用,但不能直接用,这个只适合我这边的生产环境 usage_ver () { echo "# ver 0.1 2009-12-09 by gavin" exit 0 } usage_help () { echo "Usage: $0 optstring parameters" echo " $0 [options] [--] optstring parameters" echo " -V, --version Show Version info" echo " -r, --directory Target-directory" echo " -i, --filename Include-chars" echo " -x, --exclude Exclude-chars" echo " -p, --maxdepth Maxdepth directory, 1 digit " echo " example) $0 -r /tera02/lb05a/ -i 200910 -p 1" exit 0 # echo "Usage: $0 --directory=dir1,dir2,dirN --filename=include-chars [--exclude=chars] [--maxdepth=num]" } usage_info() { echo "$0: missing optstring argument" echo "Try $0 --help" for more information. exit 0 } [[ "$1" = "--help" || "$1" =~ '^-[hH]$' ]] && usage_help [[ "$1" = "--version" || "$1" =~ '^-[Vv]$' ]] && usage_ver [ $# -eq 0 ] && usage_info GETOPT='/usr/bin/getopt' ARGS=`$GETOPT -o r:i:x:p: -l maxdepth:,exclude:,directory:,filename: -- "$@" 2>/dev/null` if [ $? != 0 ]; then usage_help; fi eval set -- "$ARGS" while true; do case "$1" in -r|--directory) DIRS=$2; shift 2;; -i|--filename) FILE=$2; shift 2;; -x|--exclude) EXCLUDE=$2; shift 2;; -p|--maxdepth) DEPTH=$2; shift 2;; --) shift; break;; *) echo 'internal error.'; exit 1;; esac done #echo "DIR -> $DIR, FILE -> $FILE, EXCLUDE -> $EXCLUDE, DEPTH -> $DEPTH" if [[ "A$DEPTH" != "A" && $DEPTH != [[:digit:]] ]] then echo "Error with --maxdepth,1 digit" usage_help fi #echo $DIR $FILE $EXCLUDE $DEPTH TREEDIR=(` for DIR in ${DIRS[@]} do [ ! -d $DIR ] && { echo "*** Error: $DIR is not directory"; continue; } [[ "A$EXCLUDE" = "A" && "X$DEPTH" = "X" ]] && find $DIR -type d |grep -v rename [[ "A$EXCLUDE" != "A" && "X$DEPTH" = "X" ]] && find $DIR -type d |grep -v $EXCLUDE|grep -v rename [[ "A$EXCLUDE" = "A" && "X$DEPTH" != "X" ]] && find $DIR -maxdepth $DEPTH -type d|grep -v rename [[ "A$EXCLUDE" != "A" && "X$DEPTH" != "X" ]] && find $DIR -maxdepth $DEPTH -type d|grep -v rename|grep -v $EXCLUDE done`) for SUBDIR in ${TREEDIR[@]} do echo "<---- Info for $SUBDIR directory ---->" printf "Size of $SUBDIR = " find $SUBDIR -type f -regex ".*"$FILE".*" -ls|awk '{total+=$7}; END{print total/(1024^2)"M"}' printf "number of files in $SUBDIR = " ls $SUBDIR|wc -l done exit 0
#more monitor_track.sh #ver 1.50 by gavin #need inotify-tools.x86_64 && inotify-tools-devel.x86_64 package #yum -y install inotify-tools.x86_64 inotify-tools-devel.x86_64 usage_info () { echo "Usage: $0 optstring parameters" echo " --verbose increase verbosity info" } install_package () { echo "need inotify-tools.x86_64 && inotify-tools-devel.x86_64 package" echo "" echo "rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt" echo "rpm -Uvh http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm" echo "rpm -Uvh http://apt.sw.be/redhat/el5/en/x86_64/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm" echo "yum -y install inotify-tools.x86_64 inotify-tools-devel.x86_64" echo "" } MONITOR_DIR=/home/atlantis/monitor LOG_DIR=/home/atlantis/logs LOG_FILE=$LOG_DIR/monitor.log #TRANS_DIR=/hdfs2 EVENTS=(-e CREATE,MODIFY) PID=/tmp/monitor_file.pid echo $EOF > $LOG_FILE declare -a LBSERVER for i in {a..f} do LBSERVER[${#LBSERVER[@]}]=server01`printf "$i"` done check () { if [ ! -d $MONITOR_DIR ] then mkdir -p $MONITOR_DIR fi } monitor_file () { while inotifywait ${EVENTS[@]} $MONITOR_DIR; do HOST=(`ls $MONITOR_DIR`) # echo "${#HOST[@]}" # echo "${#LBSERVER[@]}" if [ "${#HOST[@]}" = "${#LBSERVER[@]}" ] then for ((i=0;i<${#LBSERVER[@]};i++)) do [ "${HOST[$i]}" != "${LBSERVER[$i]}" ] && echo unfinished && break done if [ "$i" = "${#LBSERVER[@]}" ] then mkdir /tmp/hadoop_ready.lock rm -rf $MONITOR_DIR/* echo "COMPLETED!!" fi fi done } main () { check [ ! -x /usr/bin/inotifywait ] && install_package [ -e $PID ] && ps -ef |awk '{print $2}' |grep `cat $PID`|grep -v grep &>/dev/null if [ `echo $?` -eq 0 ] then echo "$0 can not run : process is already running in `cat $PID` pid" exit 1 fi if [ $# -eq 0 ] then monitor_file &> $LOG_FILE & echo $! > $PID elif [ "$1" == "--verbose" ] then monitor_file else usage_info exit 1 fi } #monitor_file main $@ exit 0
#!/bin/bash #ver 1.2 by gavin #need inotify-tools.x86_64 && inotify-tools-devel.x86_64 package #yum -y install inotify-tools.x86_64 inotify-tools-devel.x86_64 usage_info () { echo "Usage: $0 optstring parameters" echo " --verbose increase verbosity info" } install_package () { echo "need inotify-tools.x86_64 && inotify-tools-devel.x86_64 package" echo "" echo "rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt" echo "rpm -Uvh http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm" echo "rpm -Uvh http://apt.sw.be/redhat/el5/en/x86_64/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm" echo "yum -y install inotify-tools.x86_64 inotify-tools-devel.x86_64" echo "" } MONITOR_DIR=/home/atlantis/monitor LOG_DIR=/home/atlantis/logs LOG_FILE=$LOG_DIR/monitor.log #TRANS_DIR=/hdfs2 EVENTS=(-e CREATE,MODIFY,MOVED_TO,DELETE) PID=/tmp/monitor_file.pid check () { if [ ! -d $MONITOR_DIR ] then mkdir -p $MONITOR_DIR fi if [ ! -d $LOG_DIR ] then mkdir -p $LOG_DIR fi echo $EOF > $LOG_FILE } monitor_file () { while inotifywait ${EVENTS[@]} $MONITOR_DIR; do HOST=`ls -rt $MONITOR_DIR |tail -n1` # DIR=`cat $MONITOR_DIR/$HOST` echo "<-- active ftp get $HOST log files `date +%Y%m%d%H%M%S`-->" # echo "`dirname %0`/get_log.sh $HOST" /home/atlantis/scripts/get_log.sh $HOST & echo "" done } main () { check [ ! -x /usr/bin/inotifywait ] && install_package [ -e $PID ] && ps -ef |awk '{print $2}' |grep `cat $PID`|grep -v grep &>/dev/null if [ `echo $?` -eq 0 ] then echo "$0 can not run : process is already running in `cat $PID` pid" exit 1 fi if [ $# -eq 0 ] then monitor_file &> $LOG_FILE & echo $! > $PID elif [ "$1" == "--verbose" ] then monitor_file else usage_info exit 1 fi } #monitor_file main $@