必须用 curl -fssl --max-time 3 -h "user-agent: composer/2.9.6" https://mirrors.ustc.edu.cn/composer/p2/monolog/monolog.json | jq -e 'has("packages")' 验证元数据接口可用性,仅测首页 200 是无效的。

怎么确认镜像源真正响应了 p2/ 接口
只测 https://mirrors.aliyun.com/composer/ 返回 200 是无效的——Composer 实际请求的是 /p2/vendor/package.json 这类路径,首页通不代表元数据接口可用。常见错误是看到 HTTP 200 就认为正常,结果 composer require 卡在 “Loading from cache” 或直接 fallback 到 packagist.org。
- 必须用
curl -fsSL --max-time 3 https://mirrors.ustc.edu.cn/composer/p2/monolog/monolog.json | jq -e 'has("packages")'验证响应体结构 - 加
-H "User-Agent: Composer/2.9.6",部分镜像(如华为云)会拦截非 Composer UA 的请求并返回 403 - 若返回空 JSON 或
jq: error,说明镜像同步中断或元数据损坏,不是网络问题
如何验证本地缓存是否已更新
composer clear-cache 不清元数据缓存,这是最常被忽略的点。即使镜像站已同步最新包,composer show vendor/package 仍可能报 “no matching package found”,因为 Composer 还在读 ~/.composer/cache/repo/https---mirrors-aliyun-com-composer/packages.json 里的旧索引。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 先查当前生效镜像:
composer config -g repos.packagist.org - 定位缓存目录:
ls -d ~/.composer/cache/repo/https---$(echo $(composer config -g repos.packagist.org | grep url | awk -F'"' '{print $4}') | sed 's|/|-|g' | sed 's|-*$||') - 手动删整个目录:
rm -rf ~/.composer/cache/repo/https---mirrors-aliyun-com-composer - 再执行
composer show,强制重拉packages.json和p/vendor/package.json
怎么监控 rsync 同步是否卡死或失败
镜像站凌晨挂,90% 是 rsync 进程异常退出、磁盘写满、或 /data/mirror/composer 变只读(ext4 日志满),但没人发现——因为没暴露关键指标。
- 暴露
mirror_sync_duration_seconds{repo="packagist"},超 1800 秒就告警 - 加
node_filesystem_readonly{mount="/data"}指标,只读状态会导致 rsync 静静失败,exit code 还是 0 - 别只查
ps aux | grep rsync,要用absent(process_start_time_seconds{job="mirror-rsync"})检测进程是否真正存活 - 同步脚本失败后,先跑
rsync --dry-run验证目标路径可写、SSH key 有效、host key 未变更,再决定是否重启
为什么 Prometheus 不能直接监控 composer 命令
因为 composer install 是短命 CLI 进程,没有 /metrics 端点,process_exporter 只能告诉你“它曾经存在过”,无法关联项目名、PHP 版本、镜像源 URL 这些上下文。
- 真正该监控的是它的依赖对象:镜像源的 HTTP 延迟、TLS 握手时间、证书剩余天数
- 本地磁盘:
disk_avail_bytes{mount="/home"},低于 5GB 时自动清理~/.composer/cache/files - PHP 内存峰值:在自定义
script中调用memory_get_peak_usage()打点 - 别在 CI 中裸跑
composer update,要包装成带计时和日志捕获的 shell 函数,超时 300 秒就存日志并告警
composer require 静默失败的真正原因。










