4

Linux下,如何自动对日志进行压缩备份?

 2 years ago
source link: https://os.51cto.com/article/716103.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Linux下,如何自动对日志进行压缩备份?-51CTO.COM

Linux下,如何自动对日志进行压缩备份?
作者:二师兄 2022-08-11 07:07:46
当今天系统再次报警磁盘不足时,决定彻底解决该问题。解决的方案也很简单,基于Linux写一个简单的脚本,对日志进行定时压缩备份。
e7a6ba04628216166c6520501ca79ac21b8178.jpg

系统中安装了前置机服务,该服务由银行提供。前置机日志打印的非常详细,同时并未进行压缩处理。这导致的直接后果就是,每天会有5G左右的日志产生。过不了多久就需要手动压缩备份一次。

当今天系统再次报警磁盘不足时,决定彻底解决该问题。解决的方案也很简单,基于Linux写一个简单的脚本,对日志进行定时压缩备份。大家如果在实践中遇到类似的问题,可以直接基于下面的脚本进行修改、丰富使用。

执行脚本编写

首先,创建一个执行日志压缩、备份和删除的脚本,命名backup.sh,并赋予可执行权限,脚本内容如下:

#!/bin/bash

cd /log/
echo '开始压缩...'
tar -czvf /log/bak/trade.log.`date -d yesterday +%F`.tar.gz trade.log.`date -d yesterday +%F`
echo '压缩完毕...,执行删除'
rm -rf trade.log.`date -d yesterday +%F`
echo '删除完毕.'

在上述脚本中,先通过cd​命令进入目标目录,在执行命令中会通过echo打印一些日志信息,这个主要用于进行调试。

执行tar -czvf命令,进行日志的压缩。命令后面第一个参数为压缩之后的文件的名称及存储路径,这里放到bak目录下,第二个参数为待压缩的日志。

我们重点来介绍一下文件名称中date -d yesterday +%F​的含义。在Linux中,date +"%F"能输出系统的当前日期:

$ date +"%F"
2022-08-09

命令中,date命令是输入日期,后面部分用于格式化。

但这都是打印出系统的当前时间,如果要获取相对当前时间的某个时间,需要通过-d参数来实现。

$ date -d yesterday +%F
2022-08-08

这里就获得了前一天的日期了。当然,也可以输出后一天的时间,比如:

$ date -d"yesterday" +"%F %H:%M:%S"
2022-08-08 21:36:15

在理解了如何获取系统日期之后,上面的脚本就比较好理解了。

先通过执行tar -czvf​命令,进行日志的压缩,压缩文件直接存放在bak目录,压缩完毕之后,通过rm -rf命令对日志进行删除。

在完成上述编辑之后,可以直接执行该脚本,验证一下是否正确,然后就可以通过定时任务来进行配置了。

定时任务执行

在完成了脚本的编写并赋予可执行权限之后,就需要基于crontab来进行定时任务的配置。

执行crontab -e打开定时任务文件编辑界面,输入如下信息:

30 2 * * * /log/backup.sh

上面的指令是在说:每天2点30分执行/log/backup.sh脚本。编辑完成,保持退出。那么在每天凌晨2点30分,便会进行脚本的执行。

这里再拓展一下,上述crontab中对应的表达式含义如下:

minute   hour   day   month   week   command     顺序:分 时 日 月 周 命令

根据需要,你可以调整定时任务的执行时间点或周期。

关于crontab这里再补充一下它的常见指令,方便大家使用:

crontab -e // 编辑
crontab -l // 查看

service crond status

service crond start// 启动服务

service crond stop// 关闭服务

service crond restart// 重启服务

service crond reload  // 重新载入配置

cd /var/spool/mail/用户文件 查看执行情况

至此,关于Linux下自动日志压缩备份脚本已经完成。虽然非常简单,但却可以极大地释放人力资源,再也不用手动清理了。当然,在实践中,场景不同使用的脚本可能更会更复杂,但基本原理是一致的,大家可根据具体情况来丰富脚本的功能。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK