在linux下的日志会定期进行滚动增加,可以在线对正在进行回滚的日志进行指定大小的切割。(动态)

当日志达到某个特定的大小,将日志分类,之前的日志保留一个备份,再产生的日志创建一个同名的文件保存新的日志。

Nginx日志切割

在/usr/local/scripts文件夹中新增名为nginx-log.sh的空文件,并把下面的代码写入文件中。

第一种nginx日志切割脚本如下:(最常用)

log_path=/var/log/nginx

d=`date +%Y-%m-%d`

d30=`date -d'30 day ago' +%Y-%m-%d`

mv ${log_path}/access.log ${log_path}/access.${d}.log

mv ${log_path}/error.log ${log_path}/error.${d}.log

/etc/init.d/nginx reload

rm -rf ${log_path}/access.${d30}.log

rm -rf ${log_path}/error.${d30}.log

第二种nginx日志切割脚本如下:

#!/bin/bash

## 零点执行该脚本

## nginx 日志文件所在的目录

LOGS_PATH=/var/log/nginx

## 获取昨天的 yyyy-MM-dd

YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)

## 重命名日志文件

mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access.${YESTERDAY}.log

mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error.${YESTERDAY}.log

## 向主进程发送 USR1 信号。USR1 信号是重新打开日志文件

kill -USR1 $(cat /var/run/nginx.pid)

## 进入日志目录

cd $LOGS_PATH

## 压缩日志文件并删除原文件

tar -zcvf access.${YESTERDAY}.tar.gz access.${YESTERDAY}.log --remove access.${YESTERDAY}.log

tar -zcvf error.${YESTERDAY}.tar.gz error.${YESTERDAY}.log --remove error.${YESTERDAY}.log

## 只保留3天的日志

DAYS=3

## 删除3天前的日志压缩包

find ${LOGS_PATH} -name "error_*" -type f -mtime +$DAYS -exec rm {} \;

find ${LOGS_PATH} -name "access_*" -type f -mtime +$DAYS -exec rm {} \;

第三种nginx日志切割脚本如下:

#!/bin/bash

#nginx log segmentation shell script

#

#日志目录

log_dir="/var/log/nginx"

cd $log_dir

time=`date +%Y-%m-%d`

#nginx启动目录

nginx_dir="/usr/sbin/nginx -c /etc/nginx/nginx.conf"

#日志保存天数

save_days=3

#日志文件名所处'/'分割的位置,key('/'数+1)

num=6;

mv ${log_dir}/access.log access.log.${time}.log

#删除设置天数前的数据

find $log_dir/ -mtime +$save_days -exec rm -rf {} \;

#平滑启动nginx

$nginx_dir -s reload

第四种nginx日志切割脚本如下:

cd /var/log/nginx

sleep 10

newNginxAccessLog="access`date +%Y-%m-%d`.log"

sleep 10

newNginxErrorLog="error`date +%Y-%m-%d`.log"

sleep 10

mv access.log $newNginxAccessLog

sleep 60

mv error.log $newNginxErrorLog

sleep 30

添加执行权限

命令:chmod +x /usr/local/scripts/nginx-log.sh

执行脚本

命令:sh /usr/local/scripts/nginx-log.sh

添加定时任务(每天凌晨定时执行脚本)

命令:crontab  -e

添加以下代码:

50 23 * * * sh /usr/local/scripts/nginx-log.sh

查看是否写入

命令:crontab -l

重新启动定时任务

命令:service crond restart

若结果显示“Redirecting to /bin/systemctl restart crond.service”,则定时任务成功启动。

查看nginx日志切分的效果

命令:ll /var/log/nginx

Tomcat日志切割

在/usr/local/scripts文件夹新建名为cleanlog.sh的空文件,并把下面的代码写入文件中。

第一种tomcat日志切割脚本如下:(最常用)

#tomcat1日志切割

log_path1=/usr/local/tomcat1/logs

d=`date +%Y-%m-%d`

d15=`date -d'15 day ago' +%Y-%m-%d`

cd ${log_path1} && cp catalina.out ${log_path1}/catalina.out.${d}.log

echo > catalina.out

rm -rf ${log_path1}/catalina.out.${d15}.log

find /usr/local/tomcat1/logs -mtime +15 -name "localhost_access_log.*" -exec rm -rf {} \;

find /usr/local/tomcat1/logs -mtime +15 -name "localhost.*" -exec rm -rf {} \;

find /usr/local/tomcat1/logs -mtime +15 -name "manager.*" -exec rm -rf {} \;

find /usr/local/tomcat1/logs -mtime +15 -name "catalina.*" -exec rm -rf {} \;

find /usr/local/tomcat1/logs -mtime +15 -name "host-manager.*" -exec rm -rf {} \;

#tomcat2日志切割

log_path2=/usr/local/tomcat2/logs

d=`date +%Y-%m-%d`

d15=`date -d'15 day ago' +%Y-%m-%d`

cd ${log_path2} && cp catalina.out ${log_path2}/catalina.out.${d}.log

echo > catalina.out

rm -rf ${log_path2}/catalina.out.${d15}.log

find /usr/local/tomcat2/logs -mtime +15 -name "localhost_access_log.*" -exec rm -rf {} \;

find /usr/local/tomcat2/logs -mtime +15 -name "localhost.*" -exec rm -rf {} \;

find /usr/local/tomcat2/logs -mtime +15 -name "manager.*" -exec rm -rf {} \;

find /usr/local/tomcat2/logs -mtime +15 -name "catalina.*" -exec rm -rf {} \;

find /usr/local/tomcat2/logs -mtime +15 -name "host-manager.*" -exec rm -rf {} \;

第二种tomcat日志切割脚本如下:

# Tomcat1日志

cd /usr/local/tomcat1/logs

sleep 10

newTomcat1CatalinaOut="catalina`date +%Y-%m-%d`.out"

sleep 10

mv catalina.out $newTomcat1CatalinaOut

sleep 60

# Tomcat2日志

cd /usr/local/tomcat2/logs

sleep 10

newTomcat2CatalinaOut="catalina`date +%Y-%m-%d`.out"

sleep 10

mv catalina.out $newTomcat2CatalinaOut

sleep 60

第三种tomcat日志切割脚本如下:

#!/bin/bash

. /etc/profile

. ~/.bash_profile

#定义日志文件目录

applog_path=/usr/local/tomcat1/logs

#定义日期格式

d=`date +%Y-%m-%d`

d3=`date -d'3 day ago' +%Y-%m-%d`

#切割日志

cd ${applog_path} && cp catalina.out catalina.$d.log

#日志备份

echo > catalina.out  #原日志清空

rm -rf catalina.${d3}*.log

添加执行权限

命令:chmod +x /usr/local/scripts/cleanlog.sh

执行脚本

命令:sh /usr/local/scripts/cleanlog.sh

添加定时任务(每天凌晨定时执行脚本)

命令:crontab  -e

添加以下代码:

50 23 * * * sh /usr/local/scripts/cleanlog.sh

立即截断日志

命令:logrotate --force /usr/local/scripts/cleanlog.sh

查看是否写入

命令:crontab -l

重新启动定时任务

命令:service crond restart

若结果显示“Redirecting to /bin/systemctl restart crond.service”,则定时任务成功启动。

查看效果:(注意:*要带上)

命令:ls -lh /usr/local/tomcat1/logs/catalina*

ls -lh /usr/local/tomcat2/logs/catalina*

Redis日志切割

在redis.conf配置文件找到logfile,添加日志文件存储路径。

在/usr/local/scripts文件夹新建名为redis_log_split.sh的空文件,并把下面的代码写入文件中。

第一种redis日志切割脚本如下:(最常用)

log_path0=/var/log/redis

d=`date +%Y-%m-%d`

d15=`date -d'15 day ago' +%Y-%m-%d`

cd ${log_path0} && cp redis.log ${log_path0}/redis.${d}.log

echo > redis.log

rm -rf ${log_path0}/redis.${d15}.log

第二种redis日志切割脚本如下:

#!/bin/bash

#日志目录

log_dir="/var/log/redis"

cd $log_dir

time=`date +%Y-%m-%d`

#redis启动目录

redis_dir="/usr/bin/redis-server /etc/redis.conf"

#日志保存天数

save_days=3

#日志文件名所处'/'分割的位置,key('/'数+1)

num=6;

mv ${log_dir}/redis.log redis.$time.log

#删除设置3天前的数据

find $log_dir/ -mtime +$save_days -exec rm -rf {} \;

#平滑启动redis

$redis_dir &

说明:和nginx、php不同,redis的日志文件可以直接mv,无需重新加载服务而生成新文件

添加执行权限

命令:touch /usr/local/redis/redis_log_split.sh

chmod +x /usr/local/redis/redis_log_split.sh

执行脚本

命令:sh /usr/local/redis/redis_log_split.sh

添加定时任务(每天凌晨定时执行脚本)

命令:crontab  -e

添加以下代码:

50 23 * * * sh /usr/local/redis/redis_log_split.sh

查看是否写入

命令:crontab -l

重新启动定时任务

命令:service crond restart

若结果显示“Redirecting to /bin/systemctl restart crond.service”,则定时任务成功启动。

查看redis日志切分的效果

命令:ll /var/log/redis

MySQL日志切割

在/usr/local/scripts文件夹新建名为clean_log.sh的空文件,并把下面的代码写入文件中。

第一种mysql日志切割脚本如下:

log_path0=/var/log/mysql

d=`date +%Y-%m-%d`

d15=`date -d'15 day ago' +%Y-%m-%d`

cd ${log_path0} && cp error.log ${log_path0}/error${d}.log

cd ${log_path0} && cp general.log ${log_path0}/general${d}.log

cd ${log_path0} && cp slow.log ${log_path0}/slow${d}.log

echo > error.log

echo > general.log

echo > slow.log

tar -zcvf ${log_path0}/error${d}.log.tar.gz ${log_path0}/error${d}.log

tar -zcvf ${log_path0}/general${d}.log.tar.gz ${log_path0}/general${d}.log

tar -zcvf ${log_path0}/slow${d}.log.tar.gz ${log_path0}/slow${d}.log

rm -rf ${log_path0}/error${d}.log

rm -rf ${log_path0}/general${d}.log

rm -rf ${log_path0}/slow${d}.log

rm -rf ${log_path0}/error${d15}.log.tar.gz

rm -rf ${log_path0}/general${d15}.log.tar.gz

rm -rf ${log_path0}/slow${d15}.log.tar.gz

第二种mysql日志切割脚本如下:

cd /var/log/mysql

sleep 10

newMysqlErrorLog="error`date +%Y-%m-%d`.log"

sleep 10

newMysqlGeneralLog="general`date +%Y-%m-%d`.log"

sleep 10

newMysqlSlowLog="slow`date +%Y-%m-%d`.log"

sleep 10

mv error.log $newMysqlErrorLog

sleep 30

mv general.log $newMysqlGeneralLog

sleep 60

mv slow.log $newMysqlSlowLog

sleep 30

添加执行权限

命令:touch /usr/local/scripts/clean_log.sh
chmod +x /usr/local/scripts/clean_log.sh

执行脚本

命令:sh /usr/local/scripts/clean_log.sh

添加定时任务(每天凌晨定时执行脚本)

命令:crontab  -e

添加以下代码:

50 23 * * * sh /usr/local/scripts/clean_log.sh

查看是否写入

命令:crontab -l

重新启动定时任务

命令:service crond restart

若结果显示“Redirecting to /bin/systemctl restart crond.service”,则定时任务成功启动。

查看mysql日志切分的效果

命令:ll /var/log/mysql