Composer install/update 卡住或报“The process timed out”是因子进程(如 git clone、unzip)耗时超默认300秒被终止,需通过设置 process-timeout 配置项延长时限,而非盲目重试。

Composer install/update 卡住或报 The process timed out
这是 Composer 在执行命令时,子进程(比如 git clone、unzip 或远程包下载)耗时超过默认阈值被强制终止。默认超时是 300 秒(5 分钟),在网速慢、包体积大、或本地资源紧张时很容易触发。
解决思路不是“加个参数重试”,而是明确告诉 Composer:“这次允许更久一点”。关键操作是设置 process-timeout 配置项。
- 临时生效:在命令末尾加
--process-timeout=1800(单位秒,例如 1800 = 30 分钟) - 全局生效:运行
composer config --global process-timeout 1800,之后所有项目都用这个值 - 仅当前项目生效:进项目目录后运行
composer config process-timeout 1800(写入composer.json的config段)
为什么设太高也不行?process-timeout 不是越大越好
设成 3600 甚至 7200 看似“保险”,但实际会掩盖真实问题:比如网络彻底中断、Git 仓库不可达、SSH 密钥失效——这些情况本该快速失败并报错,而不是让终端挂一个小时不动。
更合理的做法是分场景调整:
- 日常开发机(稳定网络):保持默认
300即可 - CI/CD 环境(如 GitHub Actions):建议设为
600~900,避免因并发拉取延迟误判 - 离线构建或内网镜像环境:确认源可靠后可设
1800,但要同步检查repositories是否指向了正确的私有源
process-timeout 和 timeout 别搞混
Composer 配置里还有个 timeout(对应 HTTP 请求超时),它控制的是下载单个 ZIP 或 JSON 元数据时的连接+读取时间,默认 300 秒。它和 process-timeout 是两回事:
-
process-timeout:管的是 shell 子进程(git、svn、unzip等)总耗时 -
timeout:管的是curl或stream下载远程文件的网络层超时 - 两者可以同时设,比如
composer config --global timeout 600+composer config --global process-timeout 1200
某些错误看似超时,其实根本不是 process-timeout 的问题
比如报错里带 Cloning into ... fatal: unable to access 'https://...': Failed to connect to ... port 443,或者 Could not fetch https://repo.packagist.org/packages.json, please review your configured sources——这说明网络不通或源配置失效,调高 process-timeout 没用,只会让失败来得更晚。
先做这几件事再考虑调超时:
- 运行
composer diagnose,看输出是否提示源不可达或证书问题 - 手动试下
curl -I https://repo.packagist.org/packages.json或git ls-remote https://github.com/vendor/package.git HEAD - 检查是否开了代理但没配给 Composer:
composer config --global github-oauth.github.com your_token或http-proxy配置
超时只是表象,卡住的真实原因往往藏在日志第一行或前几行,别急着改配置。










