Suche
Suche Menü

Logrotage mit einem bash-Script

Linux rotiert Logfiles in mehreren Stufen. Dabei gibt es verschiedene Möglichkeiten wie diese Logfiles aussehen können.

# Variante 1
logfile.log
logfile.log.0.gz
logfile.log.1.gz
logfile.log.2.gz

# Variante 2
maillog
maillog-20220828
maillog-20220904
maillog-20220911
maillog-20220918

Der Hintergrund eines solchen rotierenden Logfiles ist es, die Dateien einerseits nicht zu gross werden zu lassen und andererseits, sollten sie gzip komprimiert sein, auch Platz zu sparen.

Hier habe hier zwei Varianten für ein solches Logrotate Script:

Logrotate nach fixem Zeitraum

#!/bin/sh

# Log directory
LOGDIR=/data/logs

# Maximum number of archive logs to keep
MAXNUM=30

#Log files to be handled in that log directory 
files=(access.log error.log)

for LOGFILE in "${files[@]}"
do 

## Check if the last log archive exists and delete it.
if [ -f $LOGDIR/$LOGFILE.$MAXNUM.gz ]; then
rm $LOGDIR/$LOGFILE.$MAXNUM.gz
fi

NUM=$(($MAXNUM - 1))

## Check the previous log file.
while [ $NUM -ge 0 ]
do
NUM1=$(($NUM + 1))
if [ -f $LOGDIR/$LOGFILE.$NUM.gz ]; then
mv $LOGDIR/$LOGFILE.$NUM.gz $LOGDIR/$LOGFILE.$NUM1.gz
fi

NUM=$(($NUM - 1))
done


# Compress and clear the log file
if [ -f $LOGDIR/$LOGFILE ]; then
cat $LOGDIR/$LOGFILE | gzip > $LOGDIR/$LOGFILE.0.gz
cat /dev/null > $LOGDIR/$LOGFILE
fi

done

Quelle

Logrotate nach Filegrösse

#!/bin/bash
checkSizeOver() {
  typeset -i LFSB LFSM LOG_SIZE=10
  LF=$1
  LOG_SIZE=$2
  LFSB=$(stat -c "%s" $LF)
  # This is bytes - turn into MB, base 2}
  LFSM=${LFSB}/1048576
  # This is bytes - turn into MB, base 2
  if [ $LFSM -gt $LOG_SIZE ]
    then
      return 0
    else
      return 1
  fi
}

LOG_PATH=$1
OLD_LOG_PATH=$2
for file in $LOG_PATH/*.log
do
  SIZE=10
  NAME=$(basename $file)
  now="$(date +'%Y-%m-%d_%H-%m')"
  if checkSizeOver $file $SIZE;
    then
      DEST=$OLD_LOG_PATH/$NAME.$now
      mv $file $DEST
      echo Logfile $file is greater than $SIZE MB
    else
      echo Logfile $file is less than $SIZE MB
  fi
done

Quelle

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.