vxug-nginx-log-rotate/vxugRotate.sh

84 lines
2.0 KiB
Bash

#!/usr/bin/env bash
set -e # halt execution upon any command failing
LOGDIR="/home/smelly/"
ROTATEDIR="/home/smelly/logs/"
###############################
spin()
{
spinner="/|\\-/|\\-"
while :
do
for i in `seq 0 7`
do
echo -n "${spinner:$i:1}"
echo -en "\010"
sleep 1
done
done
}
###############################
LOGDATE=$(date --rfc-3339=d)
if [ -f ${ROTATEDIR}${LOGDATE}-vxug-logs.zip ]; then
echo -e "\e[31mError!\e[0m Log archive for this date already exists!"
exit
fi
if [ -f ${ROTATEDIR}access.${LOGDATE} ]; then
echo -e "\e[31mError!\e[0m Rotated access log for this date already exists!"
exit
fi
if [ -f ${ROTATEDIR}error.${LOGDATE} ]; then
echo -e "\e[31mError!\e[0m Rotated access log for this date already exists!"
exit
fi
cd ${LOGDIR}; pwd
ls -lah ${LOGDIR}access.log
ls -lah ${LOGDIR}error.log
echo -n "Continue rotating these logs?"
read -r -p " [y/N] " response
case "$response" in
[yY][eE][sS]|[yY])
spin &
SPID=$!
trap "kill -9 $SPID" `seq 0 15`
;;
*)
exit
;;
esac
echo -n "Roating logs..."
mv ${LOGDIR}access.log ${ROTATEDIR}access.${LOGDATE}
mv ${LOGDIR}error.log ${ROTATEDIR}error.${LOGDATE}
echo -e "\e[32mDone! \e[0m"
echo -n "Informing nginx..."
# send signal to nginx to open new log files
killall -USR1 nginx
echo -e "\e[32mDone! \e[0m"
echo -n "Calculating log checksums..."
sha256sum ${ROTATEDIR}access.${LOGDATE} >> ${ROTATEDIR}${LOGDATE}.sha256
sha256sum ${ROTATEDIR}error.${LOGDATE} >> ${ROTATEDIR}${LOGDATE}.sha256
echo -e "\e[32mDone! \e[0m"
echo -n "Zipping old log files..."
zip -9 ${ROTATEDIR}${LOGDATE}-vxug-logs.zip ${ROTATEDIR}*.${LOGDATE}>>rotate.log
echo -e "\e[32mDone! \e[0m"
echo -n "Testing zip file integrity..."
zip -T ${ROTATEDIR}${LOGDATE}-vxug-logs.zip>>rotate.log
echo -e "\e[32mDone! \e[0m"
echo -n "Calculating zip file checksum..."
sha256sum ${ROTATEDIR}${LOGDATE}-vxug-logs.zip >> ${ROTATEDIR}${LOGDATE}-vxug-logs.zip.sha256
echo -e "\e[32mDone! \e[0m"
echo "Cleaning up..."
rm -v ${ROTATEDIR}*.${LOGDATE}
echo -e "\e[32mDone! \e[0m"