You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AlmaLinux下Laravel多站点缓存清理Bash脚本卡在-type d步骤求助

解决Laravel站点批量清理脚本卡在find命令的问题

问题分析

400+站点规模下,原脚本依赖find -type d遍历所有目录判断Laravel结构,容易出现以下问题:

  • 遍历范围过大(比如包含系统目录、无关子目录),导致耗时极长被误认为卡住
  • 遇到权限不足的目录时,find会阻塞等待,无法继续
  • 日志输出逻辑缺失或错误,导致无日志生成

排查与修复步骤

1. 替换低效的find遍历逻辑

直接遍历站点根目录,逐个判断是否为Laravel项目(依赖artisan文件和storage/framework目录这两个核心标识),避免全局目录遍历:

#!/bin/bash
# 配置参数
LOG_FILE="/var/log/laravel_cache_cleanup.log"
SITES_ROOT="/var/www/sites"  # 替换为你的站点根目录

# 初始化日志文件
> "$LOG_FILE"

# 遍历所有站点目录
for site_dir in "$SITES_ROOT"/*; do
    # 跳过非目录项
    [ -d "$site_dir" ] || continue

    # 判断是否为Laravel项目
    if [ -f "$site_dir/artisan" ] && [ -d "$site_dir/storage/framework" ]; then
        echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始清理Laravel站点: $site_dir" >> "$LOG_FILE"
        
        # 进入站点目录执行清理命令
        cd "$site_dir" || {
            echo "[$(date '+%Y-%m-%d %H:%M:%S')] 无法进入目录: $site_dir" >> "$LOG_FILE"
            continue
        }

        # 执行Laravel清理命令,输出重定向到日志
        php artisan cache:clear >> "$LOG_FILE" 2>&1
        php artisan view:clear >> "$LOG_FILE" 2>&1
        php artisan route:clear >> "$LOG_FILE" 2>&1

        echo "[$(date '+%Y-%m-%d %H:%M:%S')] 站点 $site_dir 清理完成" >> "$LOG_FILE"
    else
        echo "[$(date '+%Y-%m-%d %H:%M:%S')] 跳过非Laravel目录: $site_dir" >> "$LOG_FILE"
    fi
done

echo "[$(date '+%Y-%m-%d %H:%M:%S')] 批量清理任务执行完毕" >> "$LOG_FILE"

2. 解决日志不生成问题

  • 确保LOG_FILE指定的路径存在,且运行脚本的用户有写入权限(比如用sudo chown your_user:your_group /var/log/laravel_cache_cleanup.log)
  • 脚本中所有输出都通过>> "$LOG_FILE" 2>&1重定向,确保错误信息也能写入日志

3. 排查卡住的其他可能原因

  • 权限问题:运行脚本的用户需对所有站点目录有读权限,可在遍历前添加权限检查,或用find时跳过无权限目录:
    find "$SITES_ROOT" -type d \( ! -perm /u+r \) -prune -o -name "artisan" -print
    
  • 资源不足:运行脚本时用top/htop监控CPU、内存占用,若资源耗尽,可分批次清理站点(比如每次处理50个)
  • 调试模式:在脚本开头添加set -x,运行后会输出每一步的执行细节,直接定位卡住的环节

验证方法

  1. 先手动在单个Laravel站点执行php artisan cache:clear等命令,确认命令能正常运行
  2. 运行优化后的脚本,实时查看日志:tail -f /var/log/laravel_cache_cleanup.log,确认是否正常执行
  3. 若仍有问题,检查系统挂载的远程目录(如果有),避免find遍历远程文件系统导致阻塞

内容的提问来源于stack exchange,提问作者Haris Durrani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:57:26