在使用LNMP的过程中,网站日志肯定是我们长期关注的文件,不光在网络安全方面记录了其入侵者,如何黑入我们的网站,在搜索引擎优化也是很好的参考,但随着日志文件越来越大,自然也就给服务器带来了更大的负担。
该脚本具备创建当前时间目录,比如年/月目录然后将当前指定的日志,剪切到该创建好的目录下,重启nginx服务,重新生成0kb大小的新日志文件,通过计划任务,周期性执行以上切割日志,重新生成日志的操作就能达到既让日志文件保持一定大小而且又能按照指定的时间格式和目录进行存放。方面查询的便利和文件打开的快速。
本来我觉得很简单,但是很早以前犯了很多错误,人家服务器都可以正常切割文件,而我参考网上的脚本设置,根本没有任何反应,所以写个比较齐全的步骤。
因为看到文章的操作者个人掌握的知识不同,所以尽量写的简单详细一些,如果你会一些VI编辑器的操作,强烈推荐熟练掌握,毕竟可以免去很多麻烦,如果基础不好,我们完全可以使用FTP工具上传,再设置权限。
#!/bin/bash #自动切割Nginx日志 #原nginx日志存放路径 log_files_path="/home/wwwlogs/" #nginx切割后存放路径 log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m") #待切割日志名称集合如access.log error.log 多个日志加个空格 log_files_name=(kelephant.com access) #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 #删除超过30天的日志文件 find $log_files_path -mtime +$save_days -exec rm -rf {} \; #重启nginx服务,重新生成新的文件 $nginx_sbin -s reload
将上面的脚本重命名为“cut_nginx_logs.sh”,并放在脚本放在/root/内中后,接下来就可以创建一个计划任务来执行这个脚本,首先给这个脚本授予可执行权限,脚本中的域名更换为自己的域名。
chmod +x /root/cut_nginx_logs.sh
然后创建计划任务:
crontab -e
添加一行任务(每天12点自动运行该脚本):
00 00 * * * /bin/bash /root/cut_nginx_logs.sh
这样就设置完成了,等待一天后,我们会发现/home/wwwlogs路径下,出现了当前年限和月份的目录,再点击去,就会发现在前一天的12点左右生成了新的日志文件。