网站首页 > 精选教程 正文
本期跟运维有关
与上一篇<懒人专用:利用自动脚本清理不断增长的多余日志>暴力清除日志不同, 这篇的重点是切割和备份
技术类型: Linux指令
应用平台: Centos
使用范围: 命令行/脚本
用到工具: cron / vi / logrotate
知识要点: 日志切割与备份
logrotate程序是一个Linux系统自带的日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用。
再结合我们的远程备份转移等手段, 就能起到节省生产服务器空间的效果
先上使用前后的效果对比
logrotate的配置文件和目录默认位置
/etc/logrotate.conf
/etc/logrotate.d/
logrotate.conf 才主要的配置文件,logrotate.d 是一个目录,该目录里的所有文件都会被主动读入/etc/logrotate.conf中执行。
我们以Nginx日志为例, 一步步实现日志的切割/转储/备份转移
第1步: 切割
先创建一个Nginx专用的配置文件
vi /etc/logrotate.d/nginx
我的Nginx日志假设是放在/data2/logs/里, 且都是nginx****.log(多个)这样的命名
辣么配置文件内容是这样的(实际使用时要把中文说明删除喔)
/data2/logs/nginx*.log { nginx日志路径
daily 每天轮询
compress 通过gzip 压缩转储以后的日志
rotate 60 保留60天
missingok 如果日志丢失,不报错继续滚动下一个日志
notifempty 当日志为空时不进行滚动
dateext 在文件末尾添加当前日期
sharedscripts 运行postrotate脚本
postrotate 脚本内容,给nginx发信号要求重新生成日志,如果nginx没有启动就不操作
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
可以先用-d参数验证一下配置是否正确
如果配置参数有误, 比如我们把上面的daily故意写成xdaily, 验证会显示类似这样的报错
配置无误后, 加入定时任务, 每晚12点执行
0 0 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginx
当任务成功执行时, 日志分割的规律是:被分割出来的日志会生成新的日志文件, 原日志文件将全清空; 而新日志文件命名是在原文件名基础上在后面加上"-YYYYMMDD.gz"的日期
比如原日志文件名是: nginx.log
生成的切割文件名将会是: nginx.log-20210728.gz
第2步: 转储
为了测试整个过程可靠, 我们不等定时任务执行, 先手工测试执行一次
logrotate -f /etc/logrotate.d/nginx
得到这样的结果
可以看到, 符合条件的日志文件已经被切割/压缩成了新的文件(红色部分), 而原文件则被清空
为了后续的操作安全和方便, 我们把它们转移到另一个目录(可以先手工创建好/data2/logs/bak), 等待备份转移
整个专用的脚本文件
vi bak-logs.sh
脚本内容
#!/bin/bash
mv /data2/logs/*.gz /data2/logs/bak/
授权并执行
chmod +x bak-logs.sh
./bak-logs.sh
测试成功, 把这个转储脚本(自行加入你自己的脚本路径)也放入定时任务, 安排在切割任务的后面
0 1 * * * bak-logs.sh
第3步: 备份转移
备份的目标是为了让生产服务器(我们先称它为A)上日志占用的空间节省出来
那为了备份, 我们可以在本地准备一台同样是Linux的服务器(称为B), 用来存储服务器的备份文件
为了让这个任务能定时自动执行, 无须人工干预, 我们需要让服务器A信任服务器B, 这样B就可以绕过账号密码的验证过程, 直接执行备份和转移(清除A服务器上的日志文件)任务
大概是这么个过程
鉴权是2个服务器间的密钥交换过程, 本文不作赘述
我们这里假设A已经信任B
所以在B上我们准备这样的脚本autobak.sh
#!/bin/bash
#下载服务器的切割的日志文件
scp root@www.xxx.com:/data2/logs/bak/* /data/logs/
#移除服务器的切割的日志文件
ssh root@www.xxx.com "rm -rf /data2/logs/bak/*"
也把它放到B的定时任务里
0 3 * * * autobak.sh
这样就完成了
既然节省了服务器A的空间占用情况
又保留了全部的日志
举一反三, 同样的可以把数据库等日志也配置起来, 全面接管日益增长的日志吧
这期就酱,下期再见[哈欠]
复杂的问题简单化
每次只关注一个知识点
对技术有兴趣的小伙伴可以关注我, 我经常分享各种奇奇怪怪的技术知识
猜你喜欢
- 2024-10-03 linux下的shell脚本编程介绍 linux shell脚本实例
- 2024-10-03 crontable 切割日志 切割日志文件
- 2024-10-03 Linux:日志轮转 linux日志轮转如何实现
- 2024-10-03 日志切割的方法 日志切割的方法是什么
- 2024-10-03 「Nginx」如何格式化日志并推送到远程服务器?看完原来很简单
- 2024-10-03 Linux下删点日志也能搞死人 linux删除几天前日志文件
- 2024-10-03 Linux日志管理工具Logrotate:自动化轮转与最佳实践
- 2024-10-03 logrotate日志切割 logrotate日志切割指定应用程序
- 2024-10-03 Nginx日志管理大揭秘:logrotate工具与配置,日志按日期精准分割
- 2024-10-03 linux中用shell脚本对tomcat和nginx做日志切割
你 发表评论:
欢迎- 最近发表
-
- 我的世界光影MOD下载(我的世界光影mod下载安装)
- 我的世界1.7/1.8VoxelMap小地图MOD下载
- 我的世界1.7.10多世界 整合包(我的世界1.7.10forge整合包)
- 我的世界1.8最好用的修改器下载(我的世界1.8最好用的修改器下载安装)
- 我的世界更多弯曲动作MOD下载(我的世界更多弯曲动作mod下载手机版)
- 我的世界龙珠MOD下载(我的世界龙珠模组整合包下载)
- 我的世界1.7.10以太2 下载(我的世界以太2mod1.12.2)
- 我的世界虚拟人生MOD下载分享(我的世界虚拟人生下载安装)
- 我的世界无正版账号的简单联机方法(非网易版,仅适用于局域网)
- “我的语言极限,即是我的世界的极限。” ——《On Java》书籍推荐
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)