2

我刚刚发现我一直在为我的 SVN 存储库创建的自动转储已被提前切断,基本上只有一半的转储在那里。这不是紧急情况,但我讨厌处于这种情况。它首先破坏了进行自动备份的目的。

我正在使用的命令如下。如果我在终端中手动执行它,它就可以完成;output.txt 文件大小为 16 兆,包含所有 335 个修订版。但是如果我把它留给 crontab,它会在中途退出,大约 8.1 兆,只有前 169 次修订。

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

我实际上保存到一个过时的 gzip 文件中,并且服务器上不乏空间,所以这不是磁盘空间问题。它似乎在两秒钟后退出,所以这可能是一个时间问题,但过去一个月的文件大小每次都相同,所以我认为也不是这样。crontab 是否在有限的内存空间内执行?

4

4 回答 4

5

所以,我不知道真正的问题是什么,但是如果我在转储时将 svnadmin 的 STDERR 路由到 /dev/null,一切都会顺利进行。我尝试使用“安静”标志(-q),它也成功了。我假设当从 crontab 运行的 shell 脚本在 STRERR 中遇到足够的文本时,它会停止执行正在运行的任何内容并转到下一条指令。我已经对手动文件和计划文件进行了 MD5,它们是相同的。这似乎解决了。所以如果有人自己遇到这个问题,这是我用来成功通过早期截断的 shell 脚本。这有点冗长。对不起。

#!/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 调用。

于 2010-02-27T07:39:29.760 回答
1

首先,确保它svnadmin位于 cron 作业的 PATH 环境变量中。您可能必须指定完整路径/usr/bin/svnadmin或任何合适的路径。

此外,svnadmin dump您可能希望查看svnadmin hotcopy哪个是用于备份存储库的工具,而不是 。

于 2010-02-24T05:51:11.737 回答
1

我将其作为 Debian cron 软件包中的错误提交,因为我在那里也遇到过(在虚拟服务器下)。请参阅 Debian 中的错误 #577133。Christian Kastner 通过添加代码以在未找到 MTA 时绕过所有邮件处理代码来修补该错误。

于 2010-04-22T23:37:10.810 回答
0

您对用户目录有大小限制吗?可能想先把它转储到温度。

于 2010-02-24T05:50:41.323 回答