119 lines
2.5 KiB
Bash
Executable File
119 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# use crond to run?
|
|
#
|
|
# logsize in blocks (typically 1024) above which we rotate
|
|
redundancy_mode=`uci get misc.log.redundancy_mode`
|
|
|
|
if [ "$redundancy_mode" = "1" ]; then
|
|
LOG_SIZE=$((3*1024*1024))
|
|
TMP_LOG_SIZE=$((1024*1024))
|
|
# how many compressed generations to keep
|
|
LOGGEN=5
|
|
else
|
|
LOG_SIZE=$((256*1024))
|
|
TMP_LOG_SIZE=$((100*1024))
|
|
# how many compressed generations to keep
|
|
LOGGEN=5
|
|
MIN_AVAIL_SIZE=85
|
|
fi
|
|
|
|
# logfile
|
|
TMP_LOG=/tmp/messages
|
|
LOG=/data/usr/log/messages
|
|
WIFI_LOG_TMP=/tmp/wifi_analysis.log
|
|
WIFI_LOG=/data/usr/log/wifi_analysis.log
|
|
|
|
mkdir -p /data/usr/log
|
|
touch $WIFI_LOG_TMP
|
|
|
|
#
|
|
export LANG=C
|
|
#
|
|
. /lib/lib.scripthelper.sh
|
|
#
|
|
#run in daemon
|
|
#procdaemon mute
|
|
#
|
|
dlog "INFO: syslog-ng helper."
|
|
#
|
|
|
|
while true
|
|
do
|
|
|
|
sleep 120
|
|
|
|
if [ "$redundancy_mode" != "1" ]; then
|
|
# check available space in /data
|
|
if [ `df -h /data | awk '{print $5}' | grep -v Use | awk -F '%' '{print $1}'` -gt $MIN_AVAIL_SIZE ]; then
|
|
dlog "Available space in /data is too small, so we should delete log files."
|
|
rm -rf /data/usr/log/*
|
|
fi
|
|
fi
|
|
|
|
# check if we are ready to rotate
|
|
if [[ `stat -c%s $TMP_LOG` -lt $TMP_LOG_SIZE ]] && [ `stat -c%s $WIFI_LOG_TMP` -lt $TMP_LOG_SIZE ] && ( [[ ! -f $LOG ]] || [[ `stat -c%s $LOG` -lt $LOG_SIZE ]] ); then
|
|
# too small - skip this time
|
|
continue
|
|
fi
|
|
|
|
#Save wifi log to /data/log
|
|
if [ `stat -c%s $WIFI_LOG_TMP` -gt $TMP_LOG_SIZE ]; then
|
|
cp $WIFI_LOG_TMP $WIFI_LOG_TMP.0
|
|
> $WIFI_LOG_TMP
|
|
gzip $WIFI_LOG_TMP.0
|
|
mv $WIFI_LOG_TMP.0.gz $WIFI_LOG.0.gz
|
|
fi
|
|
|
|
|
|
if [ "$redundancy_mode" = "1" ]; then
|
|
cat $TMP_LOG >> $LOG
|
|
sync
|
|
> $TMP_LOG
|
|
|
|
# check if we are ready to rotate
|
|
if [ `stat -c%s $LOG` -lt $LOG_SIZE ]; then
|
|
# too small - skip this time
|
|
continue
|
|
fi
|
|
fi
|
|
|
|
# we need to do the rotation
|
|
i=$LOGGEN
|
|
while [ $i -gt 0 ]; do
|
|
# rotate one step
|
|
newer=$(($i-1))
|
|
# check if we need to compress
|
|
if [ -f $LOG.$newer.gz ]; then
|
|
# already compressed - just rotate
|
|
mv $LOG.$newer.gz $LOG.$i.gz
|
|
elif [ -f $LOG.$newer ]; then
|
|
# need to compress
|
|
mv $LOG.$newer $LOG.$i
|
|
gzip $LOG.$i
|
|
fi
|
|
# next do the previous generation
|
|
i=$(($i-1))
|
|
done
|
|
|
|
if [ "$redundancy_mode" = "1" ]; then
|
|
# rotate the current file
|
|
mv $LOG $LOG.0
|
|
dlog "INFO: rotate $LOG => $LOG.0"
|
|
else
|
|
# rotate the current file
|
|
mv $TMP_LOG $TMP_LOG.0
|
|
gzip $TMP_LOG.0
|
|
|
|
# check if we are ready to rotate
|
|
if [ `stat -c%s $TMP_LOG.0.gz` -lt $LOG_SIZE ]; then
|
|
# rotate
|
|
mv $TMP_LOG.0.gz $LOG.0.gz
|
|
fi
|
|
fi
|
|
|
|
# kick syslog-ng to start a new file
|
|
killall -HUP syslog-ng 2>/dev/null
|
|
#
|
|
done
|