Ajout d’une purge automatique des fichiers les plus vieux quand le seuil dépasse les 90%
This commit is contained in:
156
roles/ftp/files/deleteoldfiles.sh
Normal file
156
roles/ftp/files/deleteoldfiles.sh
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
# Author : Louwrentius
|
||||||
|
# Contact : louwrentius@gmail.com
|
||||||
|
# Initial release : August 2011
|
||||||
|
# Licence : Simplified BSD License
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
VERSION=1.01
|
||||||
|
|
||||||
|
#
|
||||||
|
# Mounted volume to be monitored.
|
||||||
|
#
|
||||||
|
MOUNT="$1"
|
||||||
|
#
|
||||||
|
# Maximum threshold of volume used as an integer that represents a percentage:
|
||||||
|
# 95 = 95%.
|
||||||
|
#
|
||||||
|
MAX_USAGE="$2"
|
||||||
|
#
|
||||||
|
# Failsafe mechansim. Delete a maxium of MAX_CYCLES files, raise an error after
|
||||||
|
# that. Prevents possible runaway script. Disable by choosing a high value.
|
||||||
|
#
|
||||||
|
MAX_CYCLES=10
|
||||||
|
|
||||||
|
|
||||||
|
show_header () {
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo DELETE OLD FILES $VERSION
|
||||||
|
echo
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
show_header
|
||||||
|
|
||||||
|
reset () {
|
||||||
|
CYCLES=0
|
||||||
|
OLDEST_FILE=""
|
||||||
|
OLDEST_DATE=0
|
||||||
|
ARCH=`uname`
|
||||||
|
}
|
||||||
|
|
||||||
|
reset
|
||||||
|
|
||||||
|
if [ -z "$MOUNT" ] || [ ! -e "$MOUNT" ] || [ ! -d "$MOUNT" ] || [ -z "$MAX_USAGE" ]
|
||||||
|
then
|
||||||
|
echo "Usage: $0 <mountpoint> <threshold>"
|
||||||
|
echo "Where threshold is a percentage."
|
||||||
|
echo
|
||||||
|
echo "Example: $0 /storage 90"
|
||||||
|
echo "If disk usage of /storage exceeds 90% the oldest"
|
||||||
|
echo "file(s) will be deleted until usage is below 90%."
|
||||||
|
echo
|
||||||
|
echo "Wrong command line arguments or another error:"
|
||||||
|
echo
|
||||||
|
echo "- Directory not provided as argument or"
|
||||||
|
echo "- Directory does not exist or"
|
||||||
|
echo "- Argument is not a directory or"
|
||||||
|
echo "- no/wrong percentage supplied as argument."
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
check_capacity () {
|
||||||
|
|
||||||
|
USAGE=`df -h | grep "$MOUNT" | awk '{ print $5 }' | sed s/%//g`
|
||||||
|
if [ ! "$?" == "0" ]
|
||||||
|
then
|
||||||
|
echo "Error: mountpoint $MOUNT not found in df output."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$USAGE" ]
|
||||||
|
then
|
||||||
|
echo "Didn't get usage information of $MOUNT"
|
||||||
|
echo "Mountpoint does not exist or please remove trailing slash."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$USAGE" -gt "$MAX_USAGE" ]
|
||||||
|
then
|
||||||
|
echo "Usage of $USAGE% exceeded limit of $MAX_USAGE percent."
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo "Usage of $USAGE% is within limit of $MAX_USAGE percent."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
check_age () {
|
||||||
|
|
||||||
|
FILE="$1"
|
||||||
|
if [ "$ARCH" == "Linux" ]
|
||||||
|
then
|
||||||
|
FILE_DATE=`stat -c %Z "$FILE"`
|
||||||
|
elif [ "$ARCH" == "Darwin" ]
|
||||||
|
then
|
||||||
|
FILE_DATE=`stat -f %Sm -t %s "$FILE"`
|
||||||
|
else
|
||||||
|
echo "Error: unsupported architecture."
|
||||||
|
echo "Send a patch for the correct stat arguments for your architecture."
|
||||||
|
fi
|
||||||
|
|
||||||
|
NOW=`date +%s`
|
||||||
|
AGE=$((NOW-FILE_DATE))
|
||||||
|
if [ "$AGE" -gt "$OLDEST_DATE" ]
|
||||||
|
then
|
||||||
|
export OLDEST_DATE="$AGE"
|
||||||
|
export OLDEST_FILE="$FILE"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
process_file () {
|
||||||
|
|
||||||
|
FILE="$1"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Replace the following commands with wathever you want to do with
|
||||||
|
# this file. You can delete files but also move files or do something else.
|
||||||
|
#
|
||||||
|
echo "Deleting oldest file $FILE"
|
||||||
|
rm -f "$FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
while check_capacity
|
||||||
|
do
|
||||||
|
if [ "$CYCLES" -gt "$MAX_CYCLES" ]
|
||||||
|
then
|
||||||
|
echo "Error: after $MAX_CYCLES deleted files still not enough free space."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
reset
|
||||||
|
|
||||||
|
FILES=`find "$MOUNT" -type f`
|
||||||
|
|
||||||
|
IFS=$'\n'
|
||||||
|
for x in $FILES
|
||||||
|
do
|
||||||
|
check_age "$x"
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -e "$OLDEST_FILE" ]
|
||||||
|
then
|
||||||
|
#
|
||||||
|
# Do something with file.
|
||||||
|
#
|
||||||
|
process_file "$OLDEST_FILE"
|
||||||
|
else
|
||||||
|
echo "Error: somehow, item $OLDEST_FILE disappeared."
|
||||||
|
fi
|
||||||
|
((CYCLES++))
|
||||||
|
done
|
||||||
|
echo
|
@@ -23,3 +23,17 @@
|
|||||||
group: root
|
group: root
|
||||||
notify: restart vsftpd
|
notify: restart vsftpd
|
||||||
|
|
||||||
|
- name: Put control size script
|
||||||
|
copy:
|
||||||
|
src: files/deleteoldfiles.sh
|
||||||
|
dest: /usr/local/sbin/deleteoldfiles.sh
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: '0700'
|
||||||
|
|
||||||
|
- name: Cron control size script
|
||||||
|
cron:
|
||||||
|
name: Delete oldest file
|
||||||
|
user: root
|
||||||
|
minute: '0'
|
||||||
|
job: "/usr/local/sbin/deleteoldfiles.sh /srv 90 &> /dev/null"
|
||||||
|
Reference in New Issue
Block a user