有时候日志,一个月下来就堆积了几百mb,打开时非常卡,定位也不方便,如何在linux下,每天更新新的日志,将前一天的日志打包成如下?
用最简单的方法完成这个目标
以我的日志名为 server.log且日志在/var/log/neutron/目录下为例子:
#!/bin/bash
# 获取当前日期
today=$(date +%Y%m%d)
# 获取前一天的日期
yesterday=$(date -d yesterday +%Y%m%d)
# 检查 neutron.log 文件是否存在
if [ ! -f /var/log/neutron/server.log ]; then
echo "neutron.log 文件不存在"
exit 1
fi
# 检查 neutron.log 文件的大小是否为零
if [ -s /var/log/neutron/server.log ]; then
# 将 neutron.log 文件前一天的日志打包成 server{yesterday}.log 文件
mv /var/log/neutron/server.log /var/log/neutron/server${yesterday}.log
else
echo "neutron.log 文件为空"
touch /var/log/neutron/server.log
fi
将该脚本保存为一个名为 backup_log.sh
的文件。以下是设置脚本执行的示例:
可以直接在命令行敲/var/log/neutron/backup_log.sh 看看有没有创建成功,再进入下一步定时脚本
这里要注意 chmod -R 777 /var/log/neutron/backup_log.sh 不然没有权限也是执行不了的
然后接下来在命令行执行
# 将脚本设置为每天 0 点执行
crontab -e
# 会进入编辑文件
# 在末尾添加以下内容
0 0 * * * /var/log/neutron/backup_log.sh
在 crontab 文件中,每个任务都由六个参数组成,分别表示:
- 分钟:0 到 59
- 小时:0 到 23
- 日期:1 到 31
- 月份:1 到 12
- 星期:0 到 7,其中 0 表示星期日
- 命令:要执行的命令
执行上述命令后,脚本将每天 0 点执行一次,并将 /var/log/neutron/server.log 文件前一天的日志打包成 /var/log/neutron/server{yesterday}.log 文件。