composer脚本超时由process-timeout硬编码300秒限制导致,需通过process-timeout配置调整;错误含processtimedoutexception或-v输出卡在本地命令即可确认;推荐项目级config设置为1800或3000,避免设≥7200被忽略。

Composer 脚本执行超时,不是 PHP set_time_limit() 的问题,而是 Composer 自身用 Symfony Process 启动子进程时硬编码的 300 秒限制在起作用;必须通过 process-timeout 配置项调整,其他方式(如系统 timeout 命令、PHP ini 设置)完全无效。
怎么确认是 process-timeout 导致脚本中断
关键看错误信息里是否含 Symfony\Component\Process\Exception\ProcessTimedOutException 或报错文字明确出现 The process timed out。加 -v 参数重跑能进一步验证:
- 运行
composer run-script xxx -v,观察最后输出的Running command (CWD):是哪条命令卡住 - 如果最后是
php artisan migrate、php tests/run.php或npm run build这类本地命令,基本可锁定为process-timeout触发 - 若卡在
Downloading https://或报curl error 28,那是http-timeout,和脚本无关
三种改法:项目级、环境变量、临时参数
优先级从高到低:临时参数 > 环境变量 > 项目级配置。项目级最安全,环境变量最适合 CI/CD。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 项目级(推荐,可提交进 Git):
composer config process-timeout 1800,写入当前composer.json的config段 - 环境变量(CI 中首选):Linux/macOS 下
export COMPOSER_PROCESS_TIMEOUT=1800,Windows 下设系统级环境变量COMPOSER_PROCESS_TIMEOUT - 临时覆盖(调试用):
COMPOSER_PROCESS_TIMEOUT=1800 composer run-script deploy或composer run-script deploy --process-timeout=1800 - 注意:
composer config --global process-timeout在 Composer ^2.2+ 已废弃,别信旧教程
设多少才合理?别踩 7200 秒硬编码陷阱
process-timeout 不是越大越好,Composer 内部有硬限制:
- 设为
0表示禁用超时检查,但不建议——遇到 SSH 失败或死循环脚本会无限 hang 住 - 设为
7200(2 小时)及以上,Composer 会直接忽略该值,强制回退到默认300秒 - 常见合理值:本地开发用
3000(50 分钟),CI 中用1800(30 分钟)已覆盖绝大多数数据库迁移、大文件导出场景 - 若脚本稳定耗时超 30 分钟,说明它本身该拆分或加进度反馈,而不是靠拉长 timeout 掩盖问题
真正容易被忽略的是:超时只是表象,背后常是某条 post-install-cmd 或自定义脚本效率低下,或者 vendor 目录存在大量 symlink 导致 autoload 生成极慢。先加 -v 定位具体命令,再决定调参还是重构脚本。










