Вопрос

Я только что обнаружил, что автоматические дампы, которые я создавал в своем репозитории SVN, были отключены рано, и в основном там осталась только половина дампа.Это не чрезвычайная ситуация, но я ненавижу находиться в такой ситуации.В первую очередь это сводит на нет цель автоматического создания резервных копий.

Команда, которую я использую, приведена ниже.Если я выполню это вручную в терминале, все завершится нормально;output.txt размер файла составляет 16 мегабайт со всеми 335 правками.Но если я оставлю это кронтабу, он остановится на полпути, примерно на 8,1 мегабайт и только на первых 169 версиях.

# m h  dom mon dow   command
18 00 * * * svnadmin dump /var/svn/repos/myproject > /home/andrew/output.txt 

На самом деле я сохраняю в архивированный файл с датой, и на сервере нет нехватки места, так что это не проблема с дисковым пространством.Кажется, что он отключается через две секунды, так что это может быть проблемой времени, но размер файла каждый раз одинаков за последний месяц, так что я тоже не думаю, что дело в этом.Выполняется ли crontab в ограниченном пространстве памяти?

Это было полезно?

Решение

Итак, я не знаю, в чем здесь реальная проблема, но если я перенаправлю STDERR svnadmin в /dev / null при выполнении дампа, все пройдет хорошо.Я попытался использовать флаг "quiet" (-q), и это также увенчалось успехом.Я предполагаю, что когда сценарий оболочки, запускаемый из crontab, обнаруживает достаточное количество текста в STRERR, он останавливает выполнение всего, что он запускает, и переходит к следующей инструкции.Я выполнил MD5 для ручного файла и файла по расписанию, и они идентичны.Кажется, это решено.Так что, если кто-нибудь сам столкнется с этой проблемой, это сценарий оболочки, который я использовал, чтобы успешно пройти раннее усечение.Это немного многословно.Извините.

#!/bin/sh
echo "STARTING AT $(date +\%Y/\%m/\%d/T%I:\%M:\%S)" >> /home/andrew/svnlog.txt
rm /tmp/andrewMobileApp.dump
svnadmin dump /var/svn/repos/andrewMobileApp > /tmp/andrewMobileApp.dump 2>/dev/null
echo "svnadmin exited with code $?" >> /home/andrew/svnlog.txt
gzip -c /tmp/andrewMobileApp.dump > "/home/andrew/svnbackups/andrewMobileApp.dump.$(date +\%Y\%m\%d\%I\%M\%S).txt.gz"
echo "gzip exited with code $?" >> /home/andrew/svnlog.txt
echo "DONE AT $(date +\%Y/\%m/\%d/T%I:\%M:\%S)" >> /home/andrew/svnlog.txt
echo  "-----" >> /home/andrew/svnlog.txt

Этот скрипт вызывается через crontab суперпользователя.

Другие советы

Прежде всего, убедитесь, что svnadmin находится в переменной окружения PATH задания cron.Возможно, вам придется указать полный путь для /usr/bin/svnadmin или все, что подходит.

Кроме того, вместо svnadmin dump, возможно , вы захотите заглянуть в svnadmin hotcopy который является инструментом, предназначенным для резервного копирования репозитория.

Я отправил это как ошибку в пакете Debian cron, поскольку там я тоже сталкивался с этим (под vserver).Смотрите ошибку #577133 в Debian.Кристиан Кастнер исправил ошибку, добавив код для обхода всего кода обработки почты, если MTA не найден.

Есть ли у вас ограничение по размеру каталога пользователей?Возможно, вы захотите сначала сбросить его во temp.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top