svnstat 脚本

svnstat 脚本

因此,我正在编写一个 shell 脚本来检查我们所有相关的 svn 存储库,以便在 svnstat 中进行分析。我已经手动完成了所有这些工作,现在我正在 Vista 笔记本电脑上的 cygwin 中编写一个 bash 脚本,因为我打算在某个时候将其移动到 Linux 服务器上。

编辑:我放弃了这个,写了一个简单的 .bat 脚本。我会用其他方法弄清楚 Linux 部署。

编辑:添加了 sleep 30 和 svn log 命令。现在,我可以通过 svn log 命令知道它无法进入 svn log ... 这次,它执行了应用程序,运行了日志,然后签出数据库,然后冻结了。这次我将 sleep 30 放在日志之前和之后。

二氧化碳

#!/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”。我不认为这是问题所在,因为我让远程系统上的 top 整晚都在运行,而 rxvt 似乎并不介意。另外,我没有在 cygwin 中编写任何 bash 脚本,所以我认为这可能不推荐;虽然我不明白为什么不推荐。我不想要所有的 WebServer,因此我只检查某些文件夹。

我怀疑有什么东西挂起了 svn checkout。有什么想法吗?

编辑:这次当我按下 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
**********************************************

答案1

我偶尔会在大型结账时遇到服务器超时问题。您应该会在服务器日志中看到此问题(我在 apache httpd 下运行,我相信它在错误日志文件中)。

建议您捕获 svn checkout 命令的输出(svn checkout svn://dev-server/$1 $1 > svncolog.txt 2>&1)。

如果这是问题所在(或者即使不是),这可能会受到您在 cygwin 下使用的 svn 客户端版本的影响(您只是使用 cygwin 包吗?)——如果还没有,请尝试升级到最新版本,或者尝试安装非 cygwin 命令行客户端并在您的脚本中使用它。

我还不得不指出,您的 bash 脚本此时非常简单:您可以轻松地使用 cmd(批处理)脚本对其进行测试,从而将 cygwin 排除在外。

答案2

猜测:cygwin 或 windows 是否限制了连接数?包括关闭时的 TIME_WAIT 状态?sleep 60结帐后尝试插入。

答案3

调试建议:

  • 在 #!/bin/bash 顶部添加 -x,这样当命令在脚本中运行时,你就会得到命令的踪迹
  • 如果你有空闲的进程,可以通过在它们的 PID 上运行 strace -p 来找出它们在干什么
  • 如果可能的话,看看它是否在 svn 服务器上本地运行,以排除网络问题

相关内容