答案是process-timeout配置用于解决Composer执行git clone、unzip等子进程超时被强制终止的问题,其默认值300秒常在慢速网络或大包场景下触发,需通过项目级config设置、环境变量或命令行参数调高至1800秒左右,并依据错误信息中是否含ProcessTimedOutException精准定位。

直接调 process-timeout 配置,90% 场景就能解决;不是 PHP 的 max_execution_time 问题,也不是网络慢本身,而是 Composer 自己对子进程的硬性计时器卡住了。
怎么确认是 process-timeout 导致的?
关键看错误里有没有 Symfony\Component\Process\Exception\ProcessTimedOutException,或者文字明确出现 The process timed out。加 -v 参数重跑:composer run-script deploy -v,观察最后输出的 Running command (CWD): 是哪条命令卡住:
- 如果是
php artisan migrate、npm run build或php tests/run.php这类本地命令,基本锁定为process-timeout触发 - 如果卡在
Downloading https://或报curl error 28,那是http.timeout问题,和脚本无关 - 如果停在
Resolving dependencies,根本没发请求,说明是 DNS 或网络连通性故障,调任何 timeout 都无效
process-timeout 该设多少?别踩 7200 秒陷阱
Composer 内部有硬限制:设为 7200 及以上会被直接忽略,回退到默认 300 秒;设为 0 表示禁用检查,但不建议——遇到 SSH 失败或死循环脚本会无限 hang 住。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- CI/CD 环境推荐设
1800(30 分钟),覆盖绝大多数构建、迁移场景 - 本地开发大项目(如全量导出 + autoload 生成)可设
3000(50 分钟) - 若某脚本稳定耗时超 30 分钟,说明它本身该拆分或加进度反馈,而不是靠拉长 timeout 掩盖问题
三种设置方式,优先级和适用场景
优先级从高到低:命令行参数 > 环境变量 > 项目级配置。全局配置(composer config --global process-timeout)在 Composer ^2.2+ 已废弃,别用。
- 临时调试 / CI 单次运行:
COMPOSER_PROCESS_TIMEOUT=1800 composer run-script deploy或composer run-script deploy --process-timeout=1800 - 项目级(推荐,可提交进 Git):
composer config process-timeout 1800,写入当前composer.json的"config"段 - 环境变量(CI/CD 首选):Linux/macOS 下
export COMPOSER_PROCESS_TIMEOUT=1800;Windows PowerShell 下$env:COMPOSER_PROCESS_TIMEOUT="1800"
真正容易被忽略的是:超时只是表象。比如某条 post-install-cmd 脚本效率低下,或者 vendor 目录存在大量 symlink 导致 autoload 生成极慢。盲目调高 timeout,可能掩盖 SSH 密钥缺失、内存不足、或 symlink 扫描死循环等真实故障点。

















