宝塔部署定时任务磁盘满自动清理日志脚本
服务器运行时间越长,网站日志、面板日志和各类应用日志就越占空间,很多磁盘满问题其实都是日志堆积造成的。
本文面向零基础用户,教你在宝塔面板中部署一个定时任务,通过脚本自动清理旧日志,让磁盘保持充裕。
整篇覆盖准备、写脚本、配置计划任务、避坑和验证,操作完基本不用再手动清日志。
动手前先确认磁盘和日志位置
登录宝塔面板后,先确认磁盘压力来自哪里。
左侧菜单打开“监控”或“终端”,执行下面两个命令:
df -h | grep -E '^/|文件系统'
du -sh /www/wwwlogs /var/log 2>/dev/null
第一条看根分区使用率,第二条看常见日志目录大小。
如果你的网站日志在 /www/wwwlogs,那就以这个目录为例;
如果用的其他路径,后面脚本里的路径替换即可。
编写每分钟或每日清理脚本
推荐用 find 按时间删除日志,既准确又不会误伤正在写入的文件。
在终端执行以下命令创建脚本:
mkdir -p /www/backup/cleanup
cat > /www/backup/cleanup/clean_logs.sh <<'EOF'
#!/bin/bash
LOG_DIR="/www/wwwlogs"
KEEP_DAYS=7
find "$LOG_DIR" -name "*.log" -type f -mtime +$KEEP_DAYS -delete
rm -f /www/server/panel/logs/request/*.log 2>/dev/null
EOF
chmod +x /www/backup/cleanup/clean_logs.sh
这段脚本做的事情很清晰:
找到日志目录下 7 天前修改的 .log 文件并删除,
同时清理宝塔面板自身的请求日志。KEEP_DAYS 按你的备份习惯调整,
如果日志需要留 30 天,
改成 30 即可。
在宝塔面板添加定时任务
宝塔超级工具里的“计划任务”功能可以直接管理 shell 脚本。
操作路径如下:
- 打开宝塔左侧菜单的“计划任务”。
- 点击“添加任务”,“任务类型”选
Shell脚本。 - “任务名称”写
自动清理日志防磁盘满。 - “执行周期”建议选每天凌晨 3 点,或按小时执行(适合日志增长快的服务器)。
- 把下面这行命令粘贴到“脚本内容”:
bash /www/backup/cleanup/clean_logs.sh >> /www/backup/cleanup/cleanup.log 2>&1
- 点击“添加任务”保存,然后点任务右侧的“执行”按钮测试一次。
如果执行后没有报错,任务就配置成功了。
避坑:别删活动日志和做权限收缩
新手最容易踩的坑有三个:
第一,不要用 rm -rf * 清理日志。 这会把正在写入的日志文件也删掉,导致 Nginx 或 PHP 进程失去文件句柄,出现“No such file or directory”报错,甚至需要重启服务才能恢复。
用 find -delete 就不会碰正在使用的文件。
第二,注意日志文件扩展名。 如果你的日志按日期切分,比如 access.log-20250101,扩展名不是 .log,上面的脚本就扫不到。
这时把 -name "*.log" 改成:
find "$LOG_DIR" -type f \( -name "*.log" -o -name "*.log-*" \) -mtime +$KEEP_DAYS -delete
第三,脚本权限不能过高。 以 root 运行没问题,但如果服务器上还有别的用户,建议先 ls -l 检查脚本属主,确保只有 root 可写,避免被篡改。
验证磁盘清理效果
配置完成后,建议等两天再确认效果。
手动验证方法:
df -h / && ls -la /www/wwwlogs/ | head -20
观察根分区使用率是否下降,日志目录列表里是否只剩 7 天以内的文件。
如果定时任务执行了但没删干净,先看刚才设置的清理日志:
cat /www/backup/cleanup/cleanup.log
里面会出现 find: '/www/wwwlogs':没有那个文件或目录 这类报错,说明路径写错了,修正脚本里的 LOG_DIR 即可。
要是你用的是云服务器,磁盘满了还会连带影响 MySQL、FTP 这些服务,建议顺带装上宝塔面板的“磁盘监控”告警,当使用率超过 80% 时自动通知你。
这样日志清理脚本加上告警,磁盘问题就能提早发现、及时解决。
如果你正在处理磁盘满问题,先按本文跑通自动清理,再根据实际日志增长频率调整清理周期,就能长期保持磁盘健康。