[nodejs]svn命令行中避免进入用户交互出现卡住的情况

在Node.js后台使用svn时遇到'Error: spawn ENOMEM'错误,原因是内存不足。分析发现异常情况导致svn进程驻留。通过研究,发现用户名格式错误或密码错误时会触发用户交互。解决方法是在svn命令行添加特定参数,如`--no-auth-cache --non-interactive --trust-server-cert`,避免用户交互并解决进程驻留问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

在服务器后台nodejs上使用svn导入变更记录出现“Error: spawn ENOMEM”错误提示,查了下发现是“底层抛了错误,并且设置了errno为ENOMEM,内存不够用


现象

登录到后台系统,发现有很多svn进程驻留在了后台,于是想着应该是异常情况后svn进程出现了驻留不退出的情况


过程

调试发现了两种情况会出现驻留的情况,一种是用户名使用了邮箱全写,比如"123@sogou.com",这种情况下,会出现需要验证领域的提示;另一种是svn用户名密码输入错误的情况


解决

但是就算用户写错了,后台也需要正常处理才可以,于是想是不是spawn-svn是否含有超时时间的设置,跟踪到底层,发现最终调用了child_process中的spawn方法,查了下child_process中有两个方法用于进程的调用:spawn和exec;两个的区别,可以在网上查找...

发现spawn的参数中没有timeout属性,而exec中有timeout属性,但是因为两种调用方式返回结果不同,就需要修改spawn-svn调用的easy-spawn底层库了,这个处理方式显然不好(1.修改第三方库,后续升级第三方库就麻烦了;2.工作量比较大)...


方案

于是想着在svn命令行上查找一下解决方法,使用svn help info查找帮助文档,查找到参数如下


想了下,之前遇到一个问题:如果同台机器切换用户也会出现提示,当时采用了修改配置文件的方式,第一个参数应该就可以把这个问题解决掉...

于是添加上这三个参数后,问题解决了···

svn.getInfo([url, '--no-auth-cache', '--non-interactive', '--trust-server-cert'], function(err, info){

转载请注明:http://blog.youkuaiyun.com/sogouauto

探索测试奥义,交流测试技术,欢迎关注“搜狗测试”



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值