Итак, я создаю сценарий оболочки, чтобы проверить все наши соответствующие репозитории 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 с картинки.
Предложения по отладке:
Дикая догадка: ограничивает ли cygwin или windows количество подключений? Включая статус TIME_WAIT при закрытии? Попробуйте вставить sleep 60
после оформления заказа.