用宝塔计划任务+find命令清理日志最稳妥,需用绝对路径/bin/find按修改时间或文件名后缀精准筛选删除,避免误删正在写入的日志导致502错误。

直接用宝塔「计划任务」+ find 命令最稳,别信一键清空脚本——删错正在写的 access.log 会导致 Nginx 写失败,502 就来了。
为什么不能用 rm -rf /www/wwwlogs/*
这类命令会无差别删除所有文件,包括当前正在被 Nginx 追加写入的 access.log 和 error.log。Linux 下文件被进程打开后,rm 只是 unlink,inode 还在,但新日志无法写入,Nginx 会报 open() "/www/wwwlogs/example.com.log" failed (2: No such file),网站立刻 502。必须按修改时间或文件名后缀精准筛选。
用 find 清理网站日志的正确命令写法
宝塔计划任务里填 Shell 脚本,内容如下(注意绝对路径和重定向):
/bin/find /www/wwwlogs/ -name "*.log" -mtime +30 -exec rm -f {} \; 2>/dev/null
-
/bin/find:强制用绝对路径,避免某些精简版系统 PATH 不含/usr/bin -
-mtime +30:删 30 天前最后修改的文件;若日志是每天轮转生成(如xxx.log-20260401),-mtime可靠;若轮转后仍追加写原文件,-mtime不变,得改用-name "*-????????"匹配日期后缀 -
-exec rm -f {} \;:比-delete兼容性更好,旧版 find 支持更广 -
2>/dev/null:屏蔽find: ‘/www/wwwlogs/xxx’: No such file or directory这类非致命报错,防止邮件刷屏
计划任务配置关键点
在宝塔「计划任务」页面添加时,这几个选项错一个就静默失败:
- 任务类型选「Shell 脚本」,不是「Linux 命令」——后者会额外套一层
sh -c,对重定向支持差 - 执行用户选
root,别用www;日志目录权限通常为root:root或root:www,www用户没权限删 - 执行周期按需设,比如「每天 02:00」;高频清理(如每小时)没必要,反而增加 I/O
- 脚本保存后,去
/www/server/panel/logs/task.pl查真实 stderr 输出,比面板 UI 显示更准
删完空间没释放?先查有没有 deleted 文件占着 inode
执行清理后 df -h 磁盘占用没变,大概率是 Nginx/Apache 还在往已删除的文件句柄里写日志。立刻执行:
lsof +L1 | grep wwwlogs
如果输出类似:
nginx 12345 root 6w REG 8,1 123456789 123456789 /www/wwwlogs/example.com.log (deleted)
说明文件已删但进程还占着。临时解决:systemctl restart nginx;长期应开启宝塔「网站 → 设置 → 日志切割」,它会在轮转后自动 reopen 日志文件,避免这类问题。










