所以我正在构build一个shell脚本来检查所有相关的svn仓库,以便在svnstat中进行分析。 我已经得到了所有这些手动工作,现在我正在我的笔记本电脑上写cygwin的bash脚本,因为我打算在某些时候将其移到Linux服务器上。
编辑:我放弃了这一点,并写了一个简单的.bat脚本。 我会用其他方式来弄清楚Linux的部署。
编辑:添加了睡眠30和svn日志命令。 我现在可以用svn log命令告诉它没有进入svn日志…这一次,它执行了应用程序,运行了日志,然后检查了数据库,并冻结了。 这次我会在日志前后放置睡眠30。
co2.sh
#!/bin/bash function checkout { mkdir $1 svn checkout svn://dev-server/$1 $1 svn log --verbose --xml >> svn.log $1 sleep 30 } cd /cygdrive/c/Users/My\ User/Documents/Repos/wc checkout Applications checkout Database checkout WebServer/www.mysite.com checkout WebServer/anotherhost.mysite.com checkout WebServer/AnotherApp checkout WebServer/thirdhost.mysite.com checkout WebServer/fourthhost.mysite.com checkout WebServer/WebServices
它在很大程度上是有效的,但由于某种原因,它往往会在一些存储库之后停止工作,通常在完成一个存储库之后才会转到下一个存储库。 当它失败时,它不会自行恢复。 我试过注释svn行,它进入并创build所有的目录就好了,当我这样做 – 所以不是这样。
我正在寻找方向以及直接的build议。 Cygwin对我来说一直非常稳定,但我最近开始使用本地rxvt而不是“在cmd.exe窗口中打击”。 我不认为这是问题,因为我在远程系统上运行了一夜,rxvt似乎并不介意。 另外我还没有做任何bash脚本cygwin所以我想这可能不被推荐; 虽然我不明白为什么不。 我不希望所有的WebServer,因此我只检查出这样的某些文件夹。
我怀疑是挂了svn结帐。 这里有什么想法?
编辑:这一次,当我按Ctrl + Z取消了,我忘了我在Windows上,键入PS,看看工作仍在运行; 正如你所看到的,有很多svn进程挂在…奇怪的。
Kyle Hodgson@KyleHodgson-PC ~/winUser/Documents/Repos $ Kyle Hodgson@KyleHodgson-PC ~/winUser/Documents/Repos $ jobs [1]- Stopped bash co2.sh [2]+ Stopped ./co2.sh Kyle Hodgson@KyleHodgson-PC ~/winUser/Documents/Repos $ kill %1 [1]- Stopped bash co2.sh Kyle Hodgson@KyleHodgson-PC ~/winUser/Documents/Repos $ [1]- Terminated bash co2.sh Kyle Hodgson@KyleHodgson-PC ~/winUser/Documents/Repos $ Kyle Hodgson@KyleHodgson-PC ~/winUser/Documents/Repos $ Kyle Hodgson@KyleHodgson-PC ~/winUser/Documents/Repos $ ps PID PPID PGID WINPID TTY UID STIME COMMAND 7872 1 7872 2340 0 1000 Jun 29 /usr/bin/svn 7752 1 6140 7828 1 1000 Jun 29 /usr/bin/svn 6192 1 5044 2192 1 1000 Jun 30 /usr/bin/svn 7292 1 7452 1796 1 1000 Jun 30 /usr/bin/svn 6236 1 7304 7468 2 1000 Jul 2 /usr/bin/svn 1564 1 5032 7144 2 1000 Jul 2 /usr/bin/svn 9072 1 3960 6276 3 1000 Jul 3 /usr/bin/svn 5876 1 5876 5876 con 1000 11:22:10 /usr/bin/rxvt 924 5876 924 10192 4 1000 11:22:10 /usr/bin/bash 7212 1 7332 5584 4 1000 13:17:54 /usr/bin/svn 9412 1 5480 8840 4 1000 15:38:16 /usr/bin/svn S 8128 924 8128 9452 4 1000 17:38:05 /usr/bin/bash 9132 8128 8128 8172 4 1000 17:43:25 /usr/bin/svn 3512 1 3512 3512 con 1000 17:43:50 /usr/bin/rxvt I 10200 3512 10200 6616 5 1000 17:43:51 /usr/bin/bash 9732 1 9732 9732 con 1000 17:45:55 /usr/bin/rxvt 3148 9732 3148 8976 6 1000 17:45:55 /usr/bin/bash 5856 3148 5856 876 6 1000 17:51:00 /usr/bin/vim 7736 924 7736 8036 4 1000 17:53:26 /usr/bin/ps Kyle Hodgson@KyleHodgson-PC ~/winUser/Documents/Repos $ jobs [2]+ Stopped ./co2.sh Kyle Hodgson@KyleHodgson-PC ~/winUser/Documents/Repos $
这是一个挂在svn程序的PID,这是几个小时。 看起来像它只是无所事事。 我一直怀疑服务器上的一些中断造成这种情况; svn有一个我不知道的locking机制?
Kyle Hodgson@KyleHodgson-PC ~/winUser/Documents/Repos $ strace -p 7304 ********************************************** Program name: C:\cygwin\bin\svn.exe (pid 7304, ppid 6408) App version: 1005.25, api: 0.156 DLL version: 1005.25, api: 0.156 DLL build: 2008-06-12 19:34 OS version: Windows NT-6.0 Heap size: 402653184 Date/Time: 2009-07-06 18:20:11 **********************************************
我偶尔会遇到大型结帐服务器超时的问题。 你应该看到这在你的服务器日志(我运行在Apache HTTPD,我相信这是在错误日志文件)。
build议您捕获svn checkout命令的输出(svn checkout svn:// dev-server / $ 1 $ 1> svncolog.txt 2>&1)。
如果这是问题(或者甚至不是),这可能会受到你在cygwin下使用的svn客户端版本的影响(你只是使用cygwin包吗?) – 如果你没有使用cygwin包,或者尝试安装一个非cygwin命令行客户端,并在脚本中使用它。
我也不得不指出,你的bash脚本在这一点上是非常简单的:你可以用一个cmd(批处理)脚本来轻松地testing这个脚本,把cygwin从图片中提取出来。
狂猜:cygwin或windows是否限制连接数量? 在closures时包括TIME_WAIT状态? 尝试在结帐后插入sleep 60 。
debuggingbuild议: