日志切割简单原理如下,使用最low的方法手动日志切割
[root@www ~]# cd /usr/local/nginx/logs/
[root@www logs]# ll -h --要切割的日志lulei.access.log文件大小60M
total 24K
-rw-r--r-- 1 root root 9.6K Mar 18 21:32 access.log
-rw-r--r-- 1 root root 7.9K Mar 19 21:09 error.log
-rw-r--r-- 1 root root 60M Mar 19 21:09 lulei.access.log
-rw-r--r-- 1 root root 6 Mar 19 21:07 nginx.pid
[root@www logs]# mv lulei.access.log lulei.access.log.bak --备份要切割的日志文件
[root@www logs]# /usr/local/nginx/sbin/nginx -s reopen --使用reopen重新打开日志文件
[root@www logs]# ll -h --可以看到日志切割成功
total 24K
-rw-r--r-- 1 root root 9.6K Mar 18 21:32 access.log
-rw-r--r-- 1 nginx root 7.9K Mar 19 21:11 error.log
-rw-r--r-- 1 nginx root 0 Mar 19 21:11 lulei.access.log
-rw-r--r-- 1 root root 60M Mar 19 21:09 lulei.access.log.bak
-rw-r--r-- 1 root root 6 Mar 19 21:07 nginx.pid
可看到nginx重新生成的新的lulei.access.log日志文件,而原来的日志文件变成了以.bak结尾的文件,这样就实现了日志切割
通过shell脚本和crontab来实现
Nginx WEB服务器每天会产生大量的访问日志,而且不会自动地进行切割,如果持续天数访问,将会导致该access.log日志文件容量非常大,不便于SA查看相关的网站异常日志。
可以基于Shell 脚本结合Crontab计划任务对Nginx日志进行自动、快速的切割,其切割的方法使用mv命令即可
#!/bin/bash
#auto mv nginx log shell
#by author jfedu.net
S_LOG=/usr/local/nginx/logs/access.log
D_LOG=/data/backup/`date +%Y%m%d`
echo -e "\033[32mPlease wait start cut shell scripts...\033[1m"
sleep 2
if [ ! -d $D_LOG ];then
mkdir -p $D_LOG
fi
mv $S_LOG $D_LOG
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
echo "-------------------------------------------"
echo "The Nginx log Cutting Successfully!"
echo "You can access backup nginx log $D_LOG/access.log files."
Nginx日志切割执行结果
[root@www backup]# ./logcut.sh
Please wait start cut shell scripts...
-------------------------------------------
The Nginx log Cutting Successfully!
You can access backup nginx log /data/backup/20200319/access.log files.
将如上脚本内容写入auto_nginx_log.sh文件,crontab /var/spool/cron/root文件中添加如下代码,每天凌晨自动切割日志:
0 0 * * * /bin/sh /data/sh/auto_nginx_log.sh >>/tmp/nginx_cut.log 2>&1