如何编写缓存清理定时脚本

wen 实用脚本 27

本文目录导读:

如何编写缓存清理定时脚本

  1. Linux系统缓存清理脚本
  2. 应用程序缓存清理脚本
  3. Nginx/PHP缓存清理
  4. 自动化清理脚本(带参数)
  5. crontab配置示例
  6. 安全注意事项
  7. 使用建议

我来为您介绍几种常见的缓存清理定时脚本编写方法。

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

使用建议

  1. 测试环境先测试:在生产环境使用前,先在测试环境验证
  2. 监控脚本执行:添加日志记录和执行通知
  3. 设置适当的频率:根据业务需求调整清理频率
  4. 保留必要的缓存:不要过于频繁清理,影响性能
  5. 添加异常处理:确保脚本在出错时能正确处理

您可以根据具体需求选择合适的脚本方案,如果需要针对特定应用场景的清理脚本,请告诉我更多细节。

抱歉,评论功能暂时关闭!