Назад | Перейти на главную страницу

svnstat скрипт

Итак, я создаю сценарий оболочки, чтобы проверить все наши соответствующие репозитории svn для анализа в svnstat. Я заставил все это работать вручную, теперь я пишу сценарий bash в cygwin на моем ноутбуке с Vista, так как в какой-то момент я собираюсь перенести его на сервер Linux.

Изменить: я отказался от этого и написал простой сценарий .bat. Я разберусь с развертыванием Linux другим способом.

Изменить: добавлены команды sleep 30 и svn log. Теперь я могу сказать с помощью команды svn log, что он не попадает в журнал svn ... на этот раз он сделал Applications, запустил журнал, а затем проверил базу данных и завис. На этот раз поставлю сон 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, она входит и создает все каталоги, когда я это делаю, - так что все не так.

Я ищу направление, а также прямой совет. Cygwin был для меня очень стабильным, но недавно я начал использовать собственный rxvt вместо «bash в окне 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
$ 

Вот пример PID зависшей программы svn, так уже много часов. Похоже, он просто ничего не делает. Я все время подозреваю, что причиной этого является какое-то прерывание на сервере; у 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).

Если это проблема (или даже если это не так), на это может повлиять версия клиента svn, которую вы используете в cygwin (вы просто используете пакет cygwin?) - попробуйте выполнить обновление до последней версии, если у вас нет ' t уже или попробуйте установить клиент командной строки, отличный от cygwin, и использовать его в своем скрипте.

Я также чувствую себя обязанным указать, что ваш сценарий bash на данный момент чрезвычайно прост: вместо этого вы можете легко протестировать его с помощью сценария cmd (batch), чтобы убрать cygwin с картинки.

Предложения по отладке:

  • добавьте -x в свой #! / bin / bash вверху, чтобы вы могли отслеживать команды, когда они запускаются в скрипте
  • если у вас есть запасные процессы, выясните, на чем они висят, запустив strace -p для их PID
  • если возможно, посмотрите, работает ли он локально на сервере svn, чтобы исключить сетевые проблемы из уравнения

Дикая догадка: ограничивает ли cygwin или windows количество подключений? Включая статус TIME_WAIT при закрытии? Попробуйте вставить sleep 60 после оформления заказа.