所以我正在构建一个 shell 脚本来检查我们所有相关的 svn 存储库,以便在 svnstat 中进行分析。我已经让所有这些手动工作,现在我正在我的 Vista 笔记本电脑上的 cygwin 中编写一个 bash 脚本,因为我打算在某个时候将它移动到 Linux 服务器。
编辑:我放弃了这个并写了一个简单的 .bat 脚本。我会以其他方式找出 Linux 部署。
编辑:添加了 sleep 30 和 svn log 命令。我现在可以用 svn log 命令判断它没有进入 svn 日志……这一次,它执行了应用程序,运行了日志,然后检查了数据库,然后冻结了。这次我把sleep 30放在log前后。
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 行,当我这样做时,它会进入并创建所有目录就好了 - 所以不是那样。
我正在寻找方向以及直接的建议。Cygwin 对我来说非常稳定,但我最近确实开始使用本机 rxvt 而不是“cmd.exe 窗口中的 bash”。我不认为这是问题所在,因为我在远程系统上运行了一整夜,而 rxvt 似乎并不介意。此外,我还没有在 cygwin 中编写任何 bash 脚本,所以我想这可能不被推荐;虽然我不明白为什么不。我不想要所有的 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 的 strace,它已经这样好几个小时了。看起来它只是无所事事。我一直怀疑服务器上的某些中断导致了这种情况;svn 有我不知道的锁定机制吗?
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 下运行,我相信它在错误日志文件中)。
建议您捕获 svn checkout 命令的输出(svn checkout svn://dev-server/$1 $1 > svncolog.txt 2>&1)。
如果这是问题(或者即使不是),这可能会受到您在 cygwin 下使用的 svn 客户端版本的影响(您只是使用 cygwin 包吗?)——如果没有,请尝试升级到最新版本t 已经,或者尝试安装非 cygwin 命令行客户端并在脚本中使用它。
我还不得不指出,此时您的 bash 脚本非常简单:您可以使用 cmd(批处理)脚本轻松地对其进行测试,从而将 cygwin 排除在外。
疯狂猜测:cygwin或windows是否限制连接数?包括关闭时的TIME_WAIT状态?
sleep 60
结帐后尝试插入。调试建议: