两种方案:①Nginx 按天生成独立日志文件(推荐实时);②宝塔计划任务 + logrotate 切割已有自定义日志。 注意:宝塔默认只切割站点自带日志,自己新增的
*_baiduspider.log不会自动切割,时间久文件超大。
方式 1:Nginx 按日期输出日志(每天生成一个新文件)
Nginx 本身不支持变量直接在access_log文件名使用,需要用strftime,nginx 官方 access_log 不支持日期变量,不能直接写baidu_$(date +%Y%m%d).log。 ✅可行方案:使用logrotate做日志切割(Linux 系统自带,宝塔也在用)。
场景:你单独记录的百度爬虫日志
示例日志路径: /www/wwwlogs/www.test.com_baiduspider.log
1、新建 logrotate 配置文件
vi /etc/logrotate.d/baidu_spider
粘贴下面全部内容:
/www/wwwlogs/www.test.com_baiduspider.log { daily rotate 30 missingok notifempty compress dateext dateformat -%Y%m%d create 0644 www www postrotate /www/server/nginx/sbin/nginx -s reopen > /dev/null 2>/dev/null endscript }
参数说明:
-
daily:每天切割 -
rotate 30:保留最近 30 天日志,旧的自动删除 -
dateext dateformat -%Y%m%d:切割后文件名:www.test.com_baiduspider.log-20260823.gz -
compress:压缩旧日志,节省磁盘;不想压缩删掉compress -
create 0644 www www:新建日志文件权限,宝塔用户组 www -
postrotate:切割后通知 nginx 重新打开日志文件,关键,否则日志不写入新文件
保存退出。
手动测试是否生效
logrotate -d /etc/logrotate.d/baidu_spider
无报错,再手动执行一次切割:
logrotate -f /etc/logrotate.d/baidu_spider
此时 /www/wwwlogs 目录就会生成带日期后缀的历史日志。
logrotate 系统默认每天凌晨自动执行,无需宝塔计划任务。
方式 2:不修改 Nginx 配置,使用 shell 脚本 + 宝塔计划任务(适合方案三提取的 baidu 日志)
如果你是用 grep 提取百度爬虫到单独文件,不想碰 logrotate。 脚本 /www/extract_baidu_log.sh
#!/bin/bash DATE=$(date +%Y%m%d) domain="www.test.com" src_log="/www/wwwlogs/${domain}.log" out_log="/www/wwwlogs/${domain}_baidu_${DATE}.log" # 提取当日百度蜘蛛记录写入当日文件 grep -i "Baiduspider" ${src_log} > ${out_log}
⚠️缺点:这种方式只能切割已经生成的旧日志,不能实时流式写入;适合离线分析。
宝塔面板 →计划任务 →Shell 脚本,设置每天凌晨执行。
方式 3:Referer 百度来源日志(baidu.com访客来源)同样切割
如果你的日志是www.test.com_baidu_refer.log,复制一份 logrotate 配置,把文件名替换即可。
/www/wwwlogs/www.test.com_baidu_refer.log { daily rotate 30 missingok notifempty compress dateext dateformat -%Y%m%d create 0644 www www postrotate /www/server/nginx/sbin/nginx -s reopen > /dev/null 2>/dev/null endscript }
⚠️常见踩坑
-
切割完日志不再写入:一定不能少
nginx -s reopen,不能用nginx -s reload,reload 会短暂断服务。 -
文件权限报错:宝塔日志属主是
www:www,配置里面写create 0644 www www。 -
宝塔升级 nginx 不会影响
/etc/logrotate.d/下自定义配置。 -
查看切割后的日志:
#看压缩后的日志 zcat /www/wwwlogs/www.test.com_baiduspider.log-20260823.gz #实时看今天日志 tail -f /www/wwwlogs/www.test.com_baiduspider.log
完整工作流总结(推荐)
-
nginx 配置实时输出百度爬虫日志到
xxx_baiduspider.log -
写
/etc/logrotate.d/baidu_spider配置实现每日自动分割,保留 30 天,自动压缩 -
不要用宝塔自带日志切割,宝塔不会识别你新增的自定义日志。
如果你把你的实际域名发给我,我给你一份直接复制粘贴的完整配置。
补充:查看 logrotate 运行状态
cat /var/lib/logrotate/status