本文目录导读:

我来为您介绍几种常见的缓存清理定时脚本编写方法。
Linux系统缓存清理脚本
基本脚本
#!/bin/bash # 清理系统缓存脚本 LOG_FILE="/var/log/cache_cleanup.log" DATE=$(date '+%Y-%m-%d %H:%M:%S') echo "[$DATE] 开始清理缓存..." >> $LOG_FILE # 清理页面缓存 sync && echo 1 > /proc/sys/vm/drop_caches echo "清理页面缓存完成" >> $LOG_FILE # 清理目录项和inode缓存 sync && echo 2 > /proc/sys/vm/drop_caches echo "清理目录项缓存完成" >> $LOG_FILE # 清理所有缓存 sync && echo 3 > /proc/sys/vm/drop_caches echo "清理所有缓存完成" >> $LOG_FILE echo "[$DATE] 缓存清理完成" >> $LOG_FILE
设置定时任务
# 编辑crontab crontab -e # 每天凌晨2点执行清理 0 2 * * * /path/to/cleanup.sh # 每6小时执行一次 0 */6 * * * /path/to/cleanup.sh # 每周日凌晨3点执行 0 3 * * 0 /path/to/cleanup.sh
应用程序缓存清理脚本
Redis缓存清理
#!/bin/bash # Redis缓存清理 REDIS_CLI="/usr/local/bin/redis-cli" REDIS_HOST="localhost" REDIS_PORT="6379" REDIS_PASSWORD="your_password" # 清理特定模式缓存 $REDIS_CLI -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD KEYS "cache:*" | xargs $REDIS_CLI -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD DEL # 或直接清理所有缓存 $REDIS_CLI -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD FLUSHALL
Memcached清理
#!/bin/bash # Memcached缓存清理 echo "flush_all" | nc localhost 11211 echo "清理Memcached缓存完成"
Nginx/PHP缓存清理
#!/bin/bash # Nginx FastCGI缓存清理 NGINX_CACHE_DIR="/var/cache/nginx" find $NGINX_CACHE_DIR -type f -mtime +1 -delete # PHP OpCache清理 - 通过HTTP请求 curl -X POST http://localhost/clearcache.php # 或重启PHP-FPM systemctl restart php-fpm
自动化清理脚本(带参数)
#!/bin/bash
# 缓存清理自动化脚本
CLEANUP_MODE=${1:-"all"}
LOG_DIR="/var/log/cleanup"
DATE=$(date '+%Y%m%d_%H%M%S')
log_message() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_DIR/cleanup_$DATE.log
}
# 清理tmp目录
cleanup_tmp() {
log_message "清理临时文件..."
find /tmp -type f -atime +7 -delete
find /var/tmp -type f -atime +7 -delete
}
# 清理日志文件
cleanup_logs() {
log_message "清理过期日志..."
find /var/log -type f -name "*.log" -mtime +30 -delete
find /var/log -type f -name "*.gz" -mtime +90 -delete
}
# 清理Docker缓存
cleanup_docker() {
if command -v docker &> /dev/null; then
log_message "清理Docker缓存..."
docker system prune -af --volumes
fi
}
# 清理YUM/APT缓存
cleanup_package_cache() {
log_message "清理软件包缓存..."
if command -v yum &> /dev/null; then
yum clean all
elif command -v apt-get &> /dev/null; then
apt-get clean
fi
}
# 主函数
main() {
mkdir -p $LOG_DIR
case $CLEANUP_MODE in
"temp")
cleanup_tmp
;;
"log")
cleanup_logs
;;
"docker")
cleanup_docker
;;
"all")
cleanup_tmp
cleanup_logs
cleanup_docker
cleanup_package_cache
;;
*)
echo "使用方式: $0 {temp|log|docker|all}"
exit 1
;;
esac
log_message "清理完成"
}
main
crontab配置示例
# 编辑用户的crontab crontab -e # 每天凌晨1点执行所有清理 0 1 * * * /path/to/cleanup.sh all # 每小时清理临时文件 0 * * * * /path/to/cleanup.sh temp # 每周日清理Docker缓存 0 4 * * 0 /path/to/cleanup.sh docker # 每月的1号清理日志 0 3 1 * * /path/to/cleanup.sh log # 每6小时执行一次系统缓存清理 0 */6 * * * /usr/sbin/sysctl -w vm.drop_caches=3
安全注意事项
#!/bin/bash
# 安全检查脚本
if [[ $EUID -ne 0 ]]; then
echo "此脚本需要root权限运行"
exit 1
fi
# 检查磁盘使用率
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
if [[ $DISK_USAGE -gt 90 ]]; then
echo "磁盘使用率过高: ${DISK_USAGE}%"
echo "执行紧急缓存清理..."
sync && echo 3 > /proc/sys/vm/drop_caches
fi
使用建议
- 测试环境先测试:在生产环境使用前,先在测试环境验证
- 监控脚本执行:添加日志记录和执行通知
- 设置适当的频率:根据业务需求调整清理频率
- 保留必要的缓存:不要过于频繁清理,影响性能
- 添加异常处理:确保脚本在出错时能正确处理
您可以根据具体需求选择合适的脚本方案,如果需要针对特定应用场景的清理脚本,请告诉我更多细节。