Shuffleco.de

Lost in shuffled code

May 12, 2013 - 2 minute read - bash linux

logrotate script

Ein Logrotate Bashscript. Es gibt sicher effizientere Lösungen, allerdings habe ich keine von denen selbst geschrieben :) Daher, und zum Üben hab ich das mal gemacht.

logrotate.sh
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#Logfile Größenbegrenzung
# PARAM 1 = Datei
# PARAM 2 = Groesse in KB
# ShuffleCode, 13.05.2013

#!/bin/sh
 
fehlermeldung="Maximale Länge (in KByte) einer Datei ueberwachen. \nusage: $0 FILE SIZE"
 
#Paramter Anzahl prüfen
if [ $# -ne 2 ]
then
        echo -e $fehlermeldung >&2
        exit 1
fi
 
#vorhandensein der Datei prüfen
if [ -f $1 ] # Datei vorhanden
then
        echo -e "OK\n"
else
        echo -e "Datei $1 nicht vorhanden\n" >&2
        echo -e $fehlermeldung
        exit 2
fi
 
#Dateinamen speichern
FILE=$1
FAKTOR=1024
#KBytes in BYtes umrechnen
SIZE=$2
MAXSIZE=$(($SIZE * $FAKTOR))
 
#Owner speichern
OWNER=`ls -l $FILE | cut -d ' ' -f3`
GROUP=`ls -l $FILE | cut -d ' ' -f4`
#echo -e "besitzer: $OWNER \nGruppe: $GROUP"
TMP='/tmp/$$.tmp'
#echo -e "FILE TMP : $TMP"
 
#DateigRösse von File ermitteln
FILESIZE=`ls -l $FILE | cut -d ' ' -f5`
 
echo -e "Aktuelle Groesse: $FILESIZE"
echo -e "Maximale Groesse: $MAXSIZE"
 
ZAEHLER=0
TRUE=1
while [ $TRUE ]
do
        FILESIZE=`ls -l $FILE | cut -d ' ' -f5`
        echo -e "Aktuelle Groesse : $FILESIZE"
        if [ $FILESIZE -gt $MAXSIZE ]
        then
                touch $TMP
                echo -e "Komprimiere: "
                chown $OWNER $TMP
                chgrp $GROUP $TMP
                chmod --reference $FILE $TMP
                gzip -f $FILE
                mv $FILE.gz $FILE$ZAEHLER.gz
                mv $TMP $FILE
                let "ZAEHLER +=1"
        fi
sleep 60
done