У меня есть скрипт, который работает на Linux Ubuntu Server каждый день в 5 утра. Этот скрипт создает резервную копию всех моих SVN следующим образом:

 #!/bin/bash
 svnadmin dump /home/xxx/svn/p1 > /home/xxx/svn-backup/p1
 svnadmin dump /home/xxx/svn/p2 > /home/xxx/svn-backup/p2
 svnadmin dump /home/xxx/svn/p3 > /home/xxx/svn-backup/p3

Проблема в том, что только первый проект (p1) действительно сброшен. Остальные проекты - это файлы с таким текстом:

SVN-fs-dump-format-version: 2

UUID: 895acea3-fcd0-46fa-908a-4b43fc3278af

Номер редакции: 0 Длина содержимого проповеди: 56 Длина содержимого: 56

K 8 svn: дата V 27 2009-11-12T15: 25: 00.461875Z PROPS-END

(edit) При запуске скрипта из командной строки он создает резервные копии всех репозиториев и выполняет эту проблему только при запуске из cron.

Это почему?

2 ответа2

1

Может быть, это глупый вопрос, но есть ли в репозиториях p2 и p3 какой-либо исправленный контент / ревизии? Очевидно, что они являются репозиториями, в противном случае вы получите сообщения об ошибках вместо того, чтобы иметь выход. Однако когда я создал пустой репозиторий и запустил на svnadmin dump , я получил именно то поведение, которое вы описали. Попробуйте проверить копию репозиториев и запустить svn log чтобы увидеть, есть ли какие-либо исправленные ревизии. Опять же, может быть, это глупый вопрос, но это легко проверить.

0

Я нашел решение для этого. Проблема была связана с буферизацией вывода задания cron и cron останавливал скрипт, когда он достигал некоторого предела. То, что я сделал, чтобы решить проблему, это две вещи:

  1. в cron я перенаправил вывод в /dev /null

    0 5 * * * /home/xxx/svn-backup/run-backup > /dev/null
    
  2. В скрипте run-backup я тоже перенаправил вывод в /dev /null

    #!/bin/bash
    svnadmin dump /home/xxx/svn/p1 > /home/xxx/svn-backup/p1 2>/dev/null
    svnadmin dump /home/xxx/svn/p2 > /home/xxx/svn-backup/p2 2>/dev/null
    svnadmin dump /home/xxx/svn/p3 > /home/xxx/svn-backup/p3 2>/dev/null
    

Это заставило мой сценарий работать!

Обновление: на самом деле это также объясняется в стеке потока - https://stackoverflow.com/questions/2323933/crontab-doesnt-finish-svndump

Кажется, cron прекращает выполнение, как только в буфере вывода stderr достигнут определенный предел.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .