在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