这篇文章上次修改于 564 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

以日期码+xxx.com.access.log命名格式为例
假定原日志文件名为xxx.com.access.log

mkdir /data
vim /data/runlog.sh
#!/bin/bash
LOGPATH=/usr/local/nginx/logs/xxx.com.access.log
# 将切割出来的日志文件存入/data(没有就创建一个)
BASEPATH=/data
    
# 时间用年月日小时分钟
bak=$BASEPATH/$(date -d yesterday +%Y%m%d%H%M).xxx.com.access.log
# 用echo调试
## echo $bak
# 将xxx.com.access.log移动到/data下并改名为日期码+文件名
mv $LOGPATH $bak
# 在/usr/local/nginx/logs里创建一个新的xxx.com.access.log
touch $LOGPATH
# 用kill信号量控制nginx
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
# 保存退出
chmod +x /data/runlog.sh

将这个脚本定时运行(一分钟运行一次)

crontab -e

# 分时日月周
*/1 * * * * sh /data/runlog.sh
#保存

另外试着写了一个统计IP访问网站次数的脚本

#!/bin/bash
# LOGPATH是你的网站日志
LOGPATH=/usr/local/nginx/logs/xxx.com.access.log
# 存放cut好的log的目录
BASEPATH=/IPlogs
IPPATH=/IPlogs/IP.logs

touch $BASEPATH/$(date -d yesterday +%Y%m%d%H%M).xxx.com.access.log
bak=$BASEPATH/$(date -d yesterday +%Y%m%d%H%M).xxx.com.access.log
# 以“-”为分隔符 取第一部分内容(即IP)
cut -d'-' -f1 $LOGPATH >> $bak
echo '' > $IPPATH
date -d yesterday +%Y'年'%m'月'%d'日'%H'时'%M'分' >> $IPPATH
# 'head -20'这里 你想统计前几名就写几
cat $bak | awk '{print $(NF-1)}' | sort | uniq -c | sort -k 1 -n -r|head -20 >> $IPPATH
echo 'IP访问次数已存储至/IPlogs/IP.logs'