sunetdrive/templates/scriptreceiver/rotatefiles.erb

58 lines
1.8 KiB
Plaintext
Raw Permalink Normal View History

2023-02-13 09:44:56 +00:00
#!/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