欢迎来到奇迪科技(深圳)有限公司,超值服务提供卓越产品!
相关栏目

文档中心

Linux系统编写日志切割脚本和添加定时执行任务

作者:Admin 来源:qvdv 更新时间:2024-11-30

在Nginx系统中,同类型的日志,都会保存在一个log文件中,这将导致日志文件越来越大,不但影响读写速度,还不利于对日志进行分析。鉴于这种情况,奇迪科技建议运维人员和站长们对日志进行切割。

什么是日志切割?顾名思义,就是将日志内容按照特定的规则分开存储在不同的日志文件中,避免出现单个文件过大的情况。最常用且最有效的日志切割方案是:编写日志切割脚本再添加定时任务定时转存系统日志。

那如何给Linux系统编写日志切割脚本和添加定时执行任务按日期存储日志?

可以按照以下步骤来操作:

1、 编写日志切割脚本,要求按年、月、日存储日志文件,并且可以设定自定删除30天之前的日志,脚本代码如下(请参看注释,根据自己的实际情况修改、调整代码):

#日志文件路径,你需要搞清楚自己系统日志所在目录,再填到下面替换“/wwwroot/wwwlogs/”
log_files_path="/wwwroot/wwwlogs/"
log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")
#需要切割的日志文件名,多个文件名要用“空格”分隔开来,如下面代码所示填写了access nginx_error这两个日志文件名
log_files_name=(access nginx_error)
# nginx系统文件路径,每个系统可能不同哦,请注意改为自己的
nginx_sbin="/usr/local/nginx/sbin/nginx"
#日志保存天数,脚本执行时会删除超过该天数的日志文件
save_days=30
#下面的代码不要修改
mkdir -p $log_files_dir
log_files_num=${#log_files_name[@]}
for((i=0;i<$log_files_num;i++));do
mv ${log_files_path}${log_files_name[i]}.log ${log_files_dir}/${log_files_name[i]}_$(date -d "yesterday" +"%Y%m%d").log
done
find $log_files_path -mtime +$save_days -exec rm -rf {} ;
$nginx_sbin -s reload

请在Linux系统上使用vi或vim指令编写以上代码,再保存为在root目录下,并命名为“cut__logs.sh” 。不建议在Windows系统编写脚本代码保存为sh脚本文件后再上传,如果你这样做,可能会导致脚本无法在Nginx系统上执行!

2、 给Linux系统添加定时任务,让系统定时自动执行切割日志的脚本:

使用vi指令打开crontab文件:

crontab -e

敲击字母i进入编辑模式,添加每天0点0分执行cut_logs.sh脚本的任务,将以下命令内容添加到crontab文件:

00 00 * * * /bin/bash /root/cut_logs.sh

按下Esc键,退出编辑模式,输入以下指令执行保存crontab文件并且退出vi:

:wq

3、 重启任务管理器Crontab,执行下面指令:

systemctl restart crond

完成以上步骤操作后,你已经给Linux系统编写日志切割脚本和添加定时执行任务。要记得以后至少每个月都要查看一次日志哦,否则超过三十天就会被自动删除。

题外话:如何查看Crontab执行任务的情况?

tail -n 10 /var/log/cron

以上指令表示查看最近10条Crontab直径日志。

本文版权所有,转载须注明:来源  https://www.qvdv.net/doc-904.html