script svnstat

1

Então, estou construindo um script de shell para verificar todos os nossos repositórios svn relevantes para análise no svnstat. Eu consegui tudo isso para funcionar manualmente, agora estou escrevendo um script bash em cygwin no meu laptop Vista, como pretendo mover isso para um servidor Linux em algum momento.

Edit: Eu desisti disso e escrevi um simples script .bat. Eu vou descobrir a implantação do Linux de outra maneira.

Edit: adicionou os comandos sleep 30 e svn log. Eu posso dizer agora, com o comando svn log, que ele não está chegando ao svn log ... desta vez, ele fez Applications, e correu o log, e então checou o Database, e congelou. Vou colocar o sleep 30 antes e depois do log dessa vez.

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

Funciona, na maioria das vezes - mas por alguma razão, ele tem uma tendência a parar de funcionar depois de alguns repositórios, geralmente logo após terminar um repositório antes de ir para o próximo. Quando falhar, não irá recuperar sozinho. Eu tentei comentar a linha svn, ele entra e cria todos os diretórios muito bem quando eu faço isso - então não é isso.

Estou procurando orientação e conselhos diretos. O Cygwin tem sido muito estável para mim, mas comecei a usar o rxvt nativo em vez de "bash em uma janela cmd.exe" recentemente. Eu não acho que esse é o problema, já que eu deixei o topo em sistemas remotos funcionando a noite toda e o rxvt não pareceu se importar. Também não fiz nenhum script de bash no cygwin, então acho que isso pode não ser recomendado; embora eu não possa ver porque não. Eu não quero todo o WebServer, daí eu só verificando algumas pastas como essa.

O que eu suspeito é que algo está desligando o svn checkout. Alguma idéia aqui?

Edit: desta vez quando eu pressionei ctrl + z para cancelar, esqueci que estava no Windows e digitei ps para ver se o trabalho ainda estava rodando; e como você pode ver, existem muitos processos svn por aí ... estranhos.

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
$ 

Aqui está um strace no PID do programa svn suspenso, tem sido assim por horas. Parece que está apenas fazendo nada. Eu continuo suspeitando que alguma interrupção no servidor está causando isso; o svn tem um mecanismo de bloqueio que eu não conheço?

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
**********************************************
    
por Kyle Hodgson 06.07.2009 / 17:36

3 respostas

1

Ocasionalmente, tive problemas com o tempo limite de um servidor em caixas grandes. Você deve ver isso nos logs do seu servidor (estou executando sob o httpd do apache, acredito que esteja nos arquivos de log de erros).

Sugira que você capture a saída do comando svn checkout (svn checkout svn: // dev-server / $ 1 $ 1 > svncolog.txt 2 > & 1).

Se este é o problema (ou mesmo se não for), isso pode ser afetado pela versão do cliente svn que você está usando no cygwin (você está apenas usando o pacote cygwin?) - tente atualizar para o mais recente se você ainda não o fez, ou tente instalar um cliente de linha de comando não-cygwin e usá-lo em seu script.

Eu também me sinto obrigado a salientar que o seu script bash é extremamente simples neste ponto: você poderia facilmente testar isso com um script cmd (batch), para tirar o cygwin da imagem.

    
por 11.07.2009 / 21:54
0

Palpite: o cygwin ou o windows limitam o número de conexões? Incluindo o status TIME_WAIT quando fechado? Tente inserir sleep 60 após o seu checkout.

    
por 06.07.2009 / 17:57
0

Sugestões de depuração:

  • adicione -x ao seu #! / bin / bash na parte superior para obter um rastreio dos comandos quando eles forem executados no script
  • se você tem processos sobressalentes por aí, descubra o que eles estão esperando executando strace -p em seus PIDs
  • se possível, veja se funciona localmente no servidor svn para tirar os problemas de rede da equação
por 07.07.2009 / 06:37

Tags