Files
utils/archive_logs.sh
T
2026-06-22 18:01:08 +00:00

105 lines
2.1 KiB
Bash
Executable File

#!/bin/bash
function usage {
echo -n "Usage: ${0}"
echo -n " -L <log directory>"
echo -n " [ -A <archive_logs_dir> (default /works/archive/logs)]"
echo -n " [-D <older than time criteria> (default: '2 days ago')]"
echo -n " [-W <extra wild card> (default: '*.log.*')]"
echo
exit 1
}
echo Starting $0 $*
LogDir=${1}
LogArchiveDir=/works/archive/logs
DateCriteria="2 days ago"
ExtraWildCard=
AddHostname=
# ---------------- cmdline
while getopts "A:L:D:W:H" opt; do
case ${opt} in
A )
LogArchiveDir=$OPTARG
;;
L )
LogDir=$OPTARG
;;
D )
DateCriteria=$OPTARG
;;
W )
ExtraWildCard=$OPTARG
;;
H )
AddHostname=Y
;;
\? )
echo "Invalid option: -$OPTARG" >&2
usage
;;
: )
echo "Option -$OPTARG requires an argument." >&2
usage
;;
esac
done
# ---------------- cmdline
if [ "${LogDir}" == "" ]
then
usage
fi
Cmd="mkdir -p ${LogArchiveDir}"
echo ${Cmd} && eval ${Cmd}
echo "Looking for log files older than '${DateCriteria}' in ${LogDir}"
Oldest=$(date -d "${DateCriteria}" '+%Y-%m-%d %H:%M:%S')
Cmd="find ${LogDir}/"
Cmd+=" '('"
Cmd+=" -name '*.log'"
Cmd+=" -o -name '*.log.*'"
if [ "${ExtraWildCard}" != "" ]; then
Cmd+=" -o -name '${ExtraWildCard}'"
fi
Cmd+=" ')'"
Cmd+=" -type f"
Cmd+=" -not -newermt \"${Oldest}\""
echo $Cmd
files=$(eval ${Cmd})
if [ "$files" == "" ]
then
echo "No files found older than ${Oldest} in ${LogDir}"
else
TarFile="${LogArchiveDir}/${tmsig}.logs.tgz"
if [ "${AddHostname}" == "Y" ] ; then
TarFile="${LogArchiveDir}/${tmsig}.$(hostname -s).logs.tgz"
fi
echo Archiving to ${TarFile} files:
echo -----------------
echo ${files}
oldest_file=$(ls -t ${files} | tail -1)
youngest_file=$(ls -tr ${files} | tail -1)
tstmp1=$(stat --printf '%y' ${oldest_file})
tstmp2=$(stat --printf '%y' ${youngest_file})
tmsig="$(date -d "${tstmp1}" +"%Y%m%d_%H%M%S")-$(date -d "${tstmp2}" +"%Y%m%d_%H%M%S")"
echo $tmsig
Cmd="tar zcvf ${TarFile} ${files}"
echo $Cmd
eval $Cmd
rm $files
fi
echo Done ${0} ${*}