log directory packaging shell

The shell script packaged by the log can be added to the crontab and executed regularly every day. The log files of each hour at 24:00 a day are combined and packaged into one file, and stored in groups according to the month.

git: https://github.com/realgzq/logPatchShell

#!/bin/bash



# Help function
function HELP
{
	echo "--------log4j log patch shell,coding by realgzq----------"
	echo "The log file name must be ended with format yyyy-MM-dd-XX or  yyyy-MM-dd.XX, 2015-08-08-16"
	echo "arg1: the path of the log folder"
	echo "arg2: the log file initial string, for example the log file name console.2016-04-12-00, this arg should be console."
	echo "arg3: the days of patching file before today"
	echo "Eg: /app/shell/tar_log.sh /log/tangren-server-web/ info_tangren-server.log. 2"
	echo "if you want patch log file daily please config the /etc/crontab file like this:"
	echo "13 0 * * *  tangren /app/shell/tar_log.sh /log/tangren-erp-web/ console.log- 2"
	exit 1
}


if test -z "$1" || test -z "$2" ||test -z "$3"
then
    HELP
be


day=$3
#echo ${day}
cmd=`printf "%s%s %s" "date -d\"" "${day}" "days ago\" +%Y-%m-%d"`
#echo "----------------------------------------------------------"
#echo $cmd
#echo "----------------------------------------------------------"
name=`eval $cmd`


#echo ${day}
cmd=`printf "%s%s %s" "date -d\"" "${day}" "days ago\" +%Y-%m"`
#echo "----------------------------------------------------------"
#echo $cmd
#echo "----------------------------------------------------------"
month_day_str=`eval $cmd`

#name=`date +%Y-%m-%d --date\\="${day} days ago"`
#name=`date -d'7 days ago' +%Y-%m-%d`
#echo $name
nametitle=$2
nameall=""

echo `date '+%Y-%m-%d %H:%M:%S'`" start patching"

cd $1

#if the patch folder not exist, creat it
if [ ! -d "bak/"$month_day_str ];
then
	mkdir bak/$month_day_str
be;


for((i=0;i<24;i++));
do
	if [ $i -lt 10 ]
	then
		if [ -f $nametitle$name-0$i ]
		then
			nameall=`printf "%s %s" "$nameall" "$nametitle$name-0$i"`
		be;
		if [ -f $nametitle$name.0$i ]
		then
			nameall=`printf "%s %s" "$nameall" "$nametitle$name.0$i"`
		be;
	else
		if [ -f $nametitle$name-$i ]
		then
			nameall=`printf "%s %s" "$nameall" "$nametitle$name-$i"`
		be;
		if [ -f $nametitle$name.$i ]
		then
			nameall=`printf "%s %s" "$nameall" "$nametitle$name.$i"`
		be;
	be
done



echo "tar:$nameall => $nametitle$name.tar.gz"
echo "------------------------------------------"
tar zcf "bak/"$month_day_str"/"$nametitle$name.tar.gz $nameall
if [ -f "bak/"$month_day_str"/"$nametitle$name.tar.gz ]
then
	echo "rm:$nameall"
	rm -rf $nameall
be;
sleep 1

echo '---'$name' patch finished ---'
echo `date '+%Y-%m-%d %H:%M:%S'`" patch finished!"
echo "------------------------------------------"


Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326676864&siteId=291194637