在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直径日志。