mir3c/squashfs-root/usr/sbin/stat_points.cron

70 lines
1.6 KiB
Bash
Executable File

#!/bin/sh
#
# use crond to run?
#
. /lib/lib.scripthelper.sh
#
#run in daemon
#procdaemon mute
THRESHOLD=70 # disk use in percent
FILE_SIZE=8 # kilobytes
FILE_SIZE_MAX=256 # kilobytes. max stat file size, if exceed stat file will be truncated.
SLEEP_TIME=300 # check every 5 mins
MAX_COUNT=12 # 5*12 will be 60 mins, one hour
#prevent stat points from using too much memory
limit_stat_size() {
for i in /tmp/stat_points_*.log
do
fsize=`du "$i" | cut -f 1`
if [ "$fsize" -gt "$FILE_SIZE_MAX" ]; then
old_nr=`wc -l "$i"`
head -n 100 "$i" > /tmp/.stat_point_tmp
mv /tmp/.stat_point_tmp "$i"
logger -s -p 3 -t "stat_point" ""$old_nr" too large. truncate to 100"
fi
done
}
do_statpoints() {
limit_stat_size
ST=$(cat /proc/uptime | cut -d' ' -f1 | cut -d'.' -f1)
/usr/sbin/StatPoints
ET=$(cat /proc/uptime | cut -d' ' -f1 | cut -d'.' -f1)
return $((ET-ST))
}
counter=0
while true
do
sleep $SLEEP_TIME
# and if one of stat_points_*.log file lager than FILE_SIZE
for i in /tmp/stat_points_*.log
do
fs=$(du "$i")
s=$(echo "$fs" | cut -f 1)
[ $s -gt $FILE_SIZE ] && {
counter=0
do_statpoints
ts=$?
name=$(echo "$fs" | cut -f 2)
logger stat_points_none log_up_file="$name,$ts"
break # all stat points file have been uploaded.
}
done
# like used to be, upload every one hour
[ $counter -ge $MAX_COUNT ] && {
counter=0
sleeptm=`cat /dev/urandom |head -c 30|md5sum | tr -d [0a-zA-Z- ] 2>/dev/null`
sleeptm=$((${sleeptm:0:8}%300))
sleep $sleeptm
do_statpoints
ts=$?
logger stat_points_none log_up_file="hourly,$ts"
}
let counter+=1
done