生产环境下的服务器日志太大会影响服务器效率,所以需要对日志文件进行定时切割。可以按年切割,按月切割,按日切割,按小时切割等等。一般按天切割,每个月的日志也很大所以按月切割可以用在日志量较小的情况。
这里使用的是 Nginx的信号USR1来对日志进行切割。
# mv /data1/logs/access.log /data1/logs/20160429.log
# kill -USR1 Nginx主进程号 或者 kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
除了上面的命令,如果想每天定时切割日志,还需要借助crontab. 写一个shell脚本:
#!/bin/bash
logs_path="/data1/logs/"
mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/ //建立一个年和月的文件夹,来分离每年和每月
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
这是脚本内容,然后使用crontab每天凌晨00:00定时执行这个脚本:
crontab -e
SHELL小知识: $变量名 或者 ${变量名} 这两种形式来表示一个变量
· 命令 · 或者 $(命令) 这两种形式来执行一个命令
mkdir -p 递归创建目录