以下是一个用于定时清空文件内容并记录文件大小的Shell脚本,结合 cron 定时任务实现自动化管理。脚本包含日志记录、文件大小监控和安全性检查功能:
脚本代码
#!/bin/bash
# 功能:定时清空文件内容并记录文件大小
# 用法:./file_cleaner.sh <目标文件路径> [日志文件路径]
# 参数设置
TARGET_FILE="${1:-/var/log/app/app.log}" # 默认目标文件
LOG_FILE="${2:-/var/log/file_cleaner.log}" # 默认日志路径
MAX_LOG_SIZE=10240 # 日志最大大小(10KB),超过则清空
# 确保目标文件存在
if [ ! -f "$TARGET_FILE" ]; then
echo "[错误] 文件不存在: $TARGET_FILE" >> "$LOG_FILE"
exit 1
fi
# 记录初始大小
original_size=$(du -sh "$TARGET_FILE" | awk '{print $1}')
echo "===== 操作时间: $(date '+%Y-%m-%d %H:%M:%S') =====" >> "$LOG_FILE"
echo "原始大小: $original_size" >> "$LOG_FILE"
# 清空文件
truncate -s 0 "$TARGET_FILE" # 推荐方法,保留文件属性
# 或者使用: > "$TARGET_FILE"
# 记录清空后大小
new_size=$(du -sh "$TARGET_FILE" | awk '{print $1}')
echo "清空后大小: $new_size" >> "$LOG_FILE"
echo "------------------------" >> "$LOG_FILE"
# 日志文件管理(防止过大)
current_log_size=$(du -b "$LOG_FILE" | awk '{print $1}')
if [ "$current_log_size" -gt "$MAX_LOG_SIZE" ]; then
echo "[信息] 日志文件超过限制,执行轮转" > "$LOG_FILE"
fi
配置定时任务
1. 编辑crontab
crontab -e
2. 添加定时规则
# 每天凌晨3点执行,清空/var/log/app/app.log并记录到默认日志
0 3 * * * /root/file_cleaner.sh /var/log/app/app.log
# 每小时清空一次/tmp/data.log,并指定自定义日志路径
0 * * * * /root/file_cleaner.sh /tmp/data.log /var/log/custom_cleaner.log
3. 重载cron服务
systemctl reload cron # 适用于systemd系统
# 或者
service cron reload # 适用于SysVinit系统
使用示例
1. 手动运行测试
# 清空指定文件并记录日志
sudo ./file_cleaner.sh /var/log/nginx/access.log
2. 查看日志文件
tail -f /var/log/file_cleaner.log
输出示例:
===== 操作时间: 2023-10-05 14:30:22 =====
原始大小: 12M
清空后大小: 0K
------------------------
扩展功能
1. 多文件处理
修改脚本支持批量处理:
#!/bin/bash
FILES=("/var/log/app1.log" "/var/log/app2.log")
for file in "${FILES[@]}"; do
/path/to/file_cleaner.sh "$file"
done
2. 邮件通知
清空后发送通知邮件(需配置邮件服务):
echo "文件 $TARGET_FILE 已清空,原大小: $original_size" | mail -s "文件清理通知" admin@example.com
3. 备份文件内容
清空前备份文件:
BACKUP_DIR="/var/log/backups"
cp "$TARGET_FILE" "$BACKUP_DIR/$(basename $TARGET_FILE)_$(date +%Y%m%d).bak"
注意事项
1、文件权限
确保脚本有权限操作目标文件和写入日志
系统日志文件(如 /var/log/messages)可能需要 sudo 权限
2、日志轮转
使用 logrotate 管理日志文件(替代脚本内手动轮转):
# 配置 /etc/logrotate.d/file_cleaner
/var/log/file_cleaner.log {
daily
rotate 7
compress
missingok
}
3、重要数据保护
避免清空数据库文件、配置文件等关键数据
生产环境建议先备份再清空
通过此脚本,您可以自动化管理日志文件大小,防止磁盘空间耗尽,同时保留操作记录以便审计。建议根据实际需求调整清空频率和文件路径。