CatPtain commited on
Commit
127d978
·
verified ·
1 Parent(s): 4373c4f

Upload monitor-cleanup.sh

Browse files
Files changed (1) hide show
  1. 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