58 lines
1.8 KiB
Plaintext
58 lines
1.8 KiB
Plaintext
#!/bin/bash
|
|
config="/opt/rotate/files.conf"
|
|
config_dir="/opt/rotate/conf.d"
|
|
found_config="false"
|
|
for file in $(ls ${config} ${config_dir}/*.conf 2>/dev/null); do
|
|
if [[ -f ${file} ]]; then
|
|
found_config="true"
|
|
fi
|
|
done
|
|
|
|
# Silently quit if there is no config
|
|
if [[ "${found_config}" == "false" ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
for row in $(cat ${config} ${config_dir}/*.conf 2>/dev/null | grep -v '^#'); do
|
|
in_file=$(echo ${row} | awk -F ':' '{print $1}')
|
|
if ! [[ -f ${in_file} ]]; then
|
|
echo "ERROR - No such file: ${in_file}"
|
|
continue
|
|
fi
|
|
retention=$(echo ${row} | awk -F ':' '{print $2}')
|
|
max_size=$(echo ${row} | awk -F ':' '{print $3}')
|
|
# Retention time in days
|
|
if [[ "x${retention}" == "x" ]]; then
|
|
retention=30
|
|
fi
|
|
# max_size is maximum size of file in mega bytes before we rotate
|
|
if [[ "x${max_size}" == "x" ]]; then
|
|
# Default 256 mb
|
|
max_size=256
|
|
fi
|
|
echo "Retention is: ${retention} days"
|
|
# Now retention is in seconds
|
|
retention=$(( retention * 60 * 60 * 24 ))
|
|
echo "Max size is ${max_size} mb"
|
|
# Now max_size is in bytes
|
|
max_size=$(( max_size * 1024 * 1024 ))
|
|
if [[ $(stat -c %s ${in_file}) -gt ${max_size} ]]; then
|
|
out_file="${in_file}-$(date +%Y%m%d%H%M%S).gz"
|
|
echo "Compressing and truncating ${in_file} to ${out_file}"
|
|
cat ${in_file} | gzip > ${out_file}
|
|
:> ${in_file}
|
|
fi
|
|
now=$(date +%s)
|
|
for saved_file in $(ls ${in_file}-*.gz 2>/dev/null); do
|
|
birth_time=$(stat -c %Y ${saved_file})
|
|
if [[ ${birth_time} -eq 0 ]]; then
|
|
birth_time=${now}
|
|
fi
|
|
keep_until=$(( birth_time + retention))
|
|
if [[ ${now} -gt ${keep_until} ]]; then
|
|
echo "removing ${saved_file} since it was created at $(date -d +%Y%m%d%H%M%S @${birth_time}) and should only be saved untill $(date -d +%Y%m%d%H%M%S @${keep_until})"
|
|
rm ${saved_file}
|
|
fi
|
|
done
|
|
done
|