应修改 process-timeout 配置,它控制 git、unzip、php 等外部进程单次运行最大时长(默认300秒),可通过全局、项目级或环境变量 COMPOSER_PROCESS_TIMEOUT 设置,设为0则禁用但不推荐。

composer update 报 "The process timed out" 该改哪个 timeout
直接改 process-timeout,不是 http.timeout,也不是命令行的 --timeout(这个参数在 Composer 2.2+ 已被弃用,且容易误写成 --timeout 600 而静默失效)。
错误现象通常是卡在某条子命令上,比如:git clone https://github.com/xxx、unzip vendor/package.zip 或某个 post-update-cmd 脚本里执行的 PHP 命令。日志末尾会明确显示超时的是哪条 shell 命令。
-
process-timeout控制单个外部进程(如 git、unzip、php)的最大运行时间,单位秒,默认 300 - 全局设置:运行
composer config -g process-timeout 1200,写入~/.composer/config.json - 项目级设置:在
composer.json顶层加"config": {"process-timeout": 900},可提交、可复现 - 临时覆盖:用环境变量
COMPOSER_PROCESS_TIMEOUT=1800 composer update,优先级最高 - 设为
0表示禁用,但不推荐——一旦 git 服务器失联或 zip 包损坏,命令会无限挂起
为什么调高 process-timeout 还是卡住
很多“超时”根本不是时间问题,而是资源或配置阻塞,process-timeout 只是最后那道熔断开关。
- 内存不足:
composer update解析锁文件阶段可能 OOM,表现和超时一模一样;确认php -i | grep memory_limit≥ 1.5G,必要时加php -d memory_limit=2G composer update - VCS 包拖累:如果用了
"type": "vcs",每次git clone都计入process-timeout总时长,不是单次;先手动git clone测试是否卡在 SSH 密钥、代理或 DNS - autoload 生成卡死:卡在
Generating autoload files后无响应?大概率是 vendor 目录下 symlink 过多或 NTFS/WSL2 挂载卷 I/O 阻塞,和 timeout 无关 - CI/CD 环境被外层 kill:GitHub Actions 默认有 job timeout(6 小时),但 Docker 容器可能配了
--stop-timeout=10,Composer 还没触发process-timeout就被系统 SIGKILL 了
HTTP 下载卡在 Downloading https://… 怎么办
这是另一类问题,和 process-timeout 完全无关,得调 http.timeout。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
典型错误:反复 retry、cURL error 28、或日志停在 Downloading https://mirrors.aliyun.com/composer/p2/xxx.json 不动。
-
http.timeout控制整个 HTTP 请求生命周期:DNS + TLS 握手 + 首字节等待 + body 传输总时间,默认仅 300 秒 - 必须同步检查 PHP 的
default_socket_timeout(运行php -i | grep default_socket_timeout),若它比http.timeout小(常见值是 60),连接会在 PHP 层被提前掐断 - 项目级生效最快:运行
composer config http.timeout 600,写入当前composer.json的config段 - 国内用户别只调 timeout——先切镜像源:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,否则再高的 timeout 也连不上 packagist.org
自定义脚本(如 post-update-cmd)超时怎么破
这类脚本由 PHP 进程直接执行,不受 Composer 的任何 timeout 配置控制,得动 PHP 自身的执行限制。
- 最稳方式:用
php -d max_execution_time=0 composer update,临时取消 PHP 脚本执行时间限制 - 若脚本是你写的,可在入口第一行调
set_time_limit(1200),但注意:它只对当前 PHP 进程有效,且不能在 CLI 模式被disable_functions禁用 - 别在
composer.json的config里写"timeout": 600——这字段不存在,Composer 会忽略 - CI/CD 中建议显式指定:比如 GitHub Actions 写成
php -d max_execution_time=900 composer update --no-interaction,避免依赖 runner 的默认 php.ini
真正难搞的从来不是 timeout 数值本身,而是分不清卡在哪一层:是网络、磁盘、内存、PHP 配置,还是 Composer 某个子进程被外层系统强制终止。先看日志最后一行报错的命令,再决定动哪个 timeout,比盲目加到 3600 秒有用得多。

















