Upload monitor-cleanup.sh
Browse files- monitor-cleanup.sh +199 -0
monitor-cleanup.sh
ADDED
@@ -0,0 +1,199 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/bin/bash
|
2 |
+
|
3 |
+
# WordPress文件自动清理脚本
|
4 |
+
# 删除超过1年的文件,保持系统整洁
|
5 |
+
# 适配Hugging Face Spaces环境
|
6 |
+
|
7 |
+
# 配置变量
|
8 |
+
WORDPRESS_ROOT="/var/www/html"
|
9 |
+
LOG_FILE="/var/log/wordpress/cleanup.log"
|
10 |
+
RETENTION_DAYS=365 # 保留天数(1年)
|
11 |
+
DRY_RUN=false # 设置为true进行测试运行
|
12 |
+
|
13 |
+
# 创建日志目录
|
14 |
+
mkdir -p "$(dirname "$LOG_FILE")"
|
15 |
+
|
16 |
+
# 日志函数
|
17 |
+
log_message() {
|
18 |
+
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
|
19 |
+
}
|
20 |
+
|
21 |
+
# 获取文件大小(人类可读格式)
|
22 |
+
get_size() {
|
23 |
+
du -sh "$1" 2>/dev/null | cut -f1
|
24 |
+
}
|
25 |
+
|
26 |
+
# 开始清理
|
27 |
+
log_message "=== 开始自动清理任务 ==="
|
28 |
+
log_message "保留期限: ${RETENTION_DAYS} 天"
|
29 |
+
log_message "WordPress根目录: ${WORDPRESS_ROOT}"
|
30 |
+
|
31 |
+
# 检查WordPress目录是否存在
|
32 |
+
if [ ! -d "$WORDPRESS_ROOT" ]; then
|
33 |
+
log_message "错误: WordPress目录不存在: $WORDPRESS_ROOT"
|
34 |
+
exit 1
|
35 |
+
fi
|
36 |
+
|
37 |
+
# 统计变量
|
38 |
+
total_files_checked=0
|
39 |
+
total_files_deleted=0
|
40 |
+
total_size_freed=0
|
41 |
+
|
42 |
+
# 需要清理的目录列表
|
43 |
+
cleanup_dirs=(
|
44 |
+
"$WORDPRESS_ROOT/wp-content/uploads"
|
45 |
+
"$WORDPRESS_ROOT/wp-content/cache"
|
46 |
+
"$WORDPRESS_ROOT/wp-content/backup"
|
47 |
+
"$WORDPRESS_ROOT/wp-content/temp"
|
48 |
+
"/tmp"
|
49 |
+
"/var/log/wordpress"
|
50 |
+
)
|
51 |
+
|
52 |
+
# 排除的文件和目录模式
|
53 |
+
exclude_patterns=(
|
54 |
+
"*.db" # 数据库文件
|
55 |
+
"*.sql" # SQL备份文件
|
56 |
+
"wp-config.php" # 配置文件
|
57 |
+
"index.php" # 索引文件
|
58 |
+
".htaccess" # Apache配置
|
59 |
+
"*.log" # 当前日志文件(单独处理)
|
60 |
+
)
|
61 |
+
|
62 |
+
# 检查文件是否应该被排除
|
63 |
+
should_exclude() {
|
64 |
+
local file="$1"
|
65 |
+
local basename=$(basename "$file")
|
66 |
+
|
67 |
+
for pattern in "${exclude_patterns[@]}"; do
|
68 |
+
if [[ "$basename" == $pattern ]]; then
|
69 |
+
return 0 # 应该排除
|
70 |
+
fi
|
71 |
+
done
|
72 |
+
return 1 # 不排除
|
73 |
+
}
|
74 |
+
|
75 |
+
# 清理指定目录
|
76 |
+
cleanup_directory() {
|
77 |
+
local dir="$1"
|
78 |
+
|
79 |
+
if [ ! -d "$dir" ]; then
|
80 |
+
log_message "跳过不存在的目录: $dir"
|
81 |
+
return
|
82 |
+
fi
|
83 |
+
|
84 |
+
log_message "清理目录: $dir"
|
85 |
+
|
86 |
+
# 查找超过保留期限的文件
|
87 |
+
while IFS= read -r -d '' file; do
|
88 |
+
total_files_checked=$((total_files_checked + 1))
|
89 |
+
|
90 |
+
# 检查是否应该排除
|
91 |
+
if should_exclude "$file"; then
|
92 |
+
continue
|
93 |
+
fi
|
94 |
+
|
95 |
+
# 获取文件大小
|
96 |
+
file_size=$(get_size "$file")
|
97 |
+
|
98 |
+
if [ "$DRY_RUN" = true ]; then
|
99 |
+
log_message "[测试模式] 将删除: $file (大小: $file_size)"
|
100 |
+
else
|
101 |
+
log_message "删除文件: $file (大小: $file_size)"
|
102 |
+
if rm -f "$file" 2>/dev/null; then
|
103 |
+
total_files_deleted=$((total_files_deleted + 1))
|
104 |
+
else
|
105 |
+
log_message "警告: 无法删除文件: $file"
|
106 |
+
fi
|
107 |
+
fi
|
108 |
+
done < <(find "$dir" -type f -mtime +$RETENTION_DAYS -print0 2>/dev/null)
|
109 |
+
|
110 |
+
# 删除空目录
|
111 |
+
if [ "$DRY_RUN" = false ]; then
|
112 |
+
find "$dir" -type d -empty -delete 2>/dev/null
|
113 |
+
fi
|
114 |
+
}
|
115 |
+
|
116 |
+
# 清理日志文件(保留最近的日志)
|
117 |
+
cleanup_logs() {
|
118 |
+
log_message "清理旧日志文件..."
|
119 |
+
|
120 |
+
# 保留最近30天的日志,删除更老的
|
121 |
+
find "/var/log" -name "*.log" -type f -mtime +30 -exec rm -f {} \; 2>/dev/null
|
122 |
+
|
123 |
+
# 压缩大于10MB的当前日志文件
|
124 |
+
find "/var/log" -name "*.log" -type f -size +10M -exec gzip {} \; 2>/dev/null
|
125 |
+
}
|
126 |
+
|
127 |
+
# 清理临时文件
|
128 |
+
cleanup_temp_files() {
|
129 |
+
log_message "清理临时文件..."
|
130 |
+
|
131 |
+
# 清理PHP临时文件
|
132 |
+
find /tmp -name "php*" -type f -mtime +1 -delete 2>/dev/null
|
133 |
+
|
134 |
+
# 清理WordPress临时文件
|
135 |
+
find "$WORDPRESS_ROOT" -name "*.tmp" -type f -mtime +1 -delete 2>/dev/null
|
136 |
+
find "$WORDPRESS_ROOT" -name "*.temp" -type f -mtime +1 -delete 2>/dev/null
|
137 |
+
}
|
138 |
+
|
139 |
+
# 清理WordPress缓存
|
140 |
+
cleanup_wordpress_cache() {
|
141 |
+
log_message "清理WordPress缓存..."
|
142 |
+
|
143 |
+
# 清理对象缓存
|
144 |
+
if [ -d "$WORDPRESS_ROOT/wp-content/cache" ]; then
|
145 |
+
find "$WORDPRESS_ROOT/wp-content/cache" -type f -mtime +7 -delete 2>/dev/null
|
146 |
+
fi
|
147 |
+
|
148 |
+
# 清理页面缓存
|
149 |
+
if [ -d "$WORDPRESS_ROOT/wp-content/page-cache" ]; then
|
150 |
+
find "$WORDPRESS_ROOT/wp-content/page-cache" -type f -mtime +7 -delete 2>/dev/null
|
151 |
+
fi
|
152 |
+
}
|
153 |
+
|
154 |
+
# 执行清理任务
|
155 |
+
for dir in "${cleanup_dirs[@]}"; do
|
156 |
+
cleanup_directory "$dir"
|
157 |
+
done
|
158 |
+
|
159 |
+
# 执行特殊清理任务
|
160 |
+
cleanup_logs
|
161 |
+
cleanup_temp_files
|
162 |
+
cleanup_wordpress_cache
|
163 |
+
|
164 |
+
# 获取磁盘使用情况
|
165 |
+
disk_usage=$(df -h "$WORDPRESS_ROOT" | awk 'NR==2 {print $5}' | sed 's/%//')
|
166 |
+
|
167 |
+
# 记录清理结果
|
168 |
+
log_message "=== 清理任务完成 ==="
|
169 |
+
log_message "检查文件数: $total_files_checked"
|
170 |
+
log_message "删除文件数: $total_files_deleted"
|
171 |
+
log_message "当前磁盘使用率: ${disk_usage}%"
|
172 |
+
|
173 |
+
# 如果磁盘使用率过高,发出警告
|
174 |
+
if [ "$disk_usage" -gt 80 ]; then
|
175 |
+
log_message "警告: 磁盘使用率过高 (${disk_usage}%),建议检查大文件"
|
176 |
+
|
177 |
+
# 列出最大的10个文件
|
178 |
+
log_message "最大的10个文件:"
|
179 |
+
find "$WORDPRESS_ROOT" -type f -exec du -h {} + 2>/dev/null | sort -rh | head -10 | while read size file; do
|
180 |
+
log_message " $size - $file"
|
181 |
+
done
|
182 |
+
fi
|
183 |
+
|
184 |
+
# 清理完成后的系统信息
|
185 |
+
log_message "系统信息:"
|
186 |
+
log_message " 内存使用: $(free -h | awk 'NR==2{printf "%.1f%%", $3*100/$2 }')"
|
187 |
+
log_message " 磁盘使用: ${disk_usage}%"
|
188 |
+
log_message " 负载平均: $(uptime | awk -F'load average:' '{print $2}')"
|
189 |
+
|
190 |
+
log_message "=== 清理任务结束 ==="
|
191 |
+
echo ""
|
192 |
+
|
193 |
+
# 如果是测试模式,提醒用户
|
194 |
+
if [ "$DRY_RUN" = true ]; then
|
195 |
+
log_message "注意: 这是测试运行,没有实际删除文件"
|
196 |
+
log_message "要执行实际清理,请将脚本中的 DRY_RUN 设置为 false"
|
197 |
+
fi
|
198 |
+
|
199 |
+
exit 0
|