Linux 上的备份 svn 脚本不起作用?

Linux 上的备份 svn 脚本不起作用?

我有一个脚本,每天早上 5 点在 Linux Ubuntu Server 上运行。此脚本通过以下方式备份我的所有 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-转储格式版本: 2

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

修订编号:0 Prop-内容长度:56 内容长度:56

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

(编辑)从命令行运行脚本时,它会备份所有存储库,并且仅从 cron 运行时才会出现此问题。

这是为什么?

答案1

也许这是一个愚蠢的问题,但是存储库p2是否p3有任何已提交的内容/修订?很明显它们是存储库,否则您将收到错误消息而不是输出。但是,当我创建一个空存储库并svnadmin dump在其上运行它时,我得到了与您描述的行为完全相同的行为。尝试检出存储库的副本并运行svn log以查看是否有任何已提交的修订。同样,也许这是一个愚蠢的问题,但很容易检查。

答案2

我找到了解决方案。问题与 cron 作业的输出缓冲有关,并且 cron 在达到某个限制时会停止脚本。为了解决这个问题,我做了两件事:

  1. 在 cron 中我将输出重定向到 /dev/null

    0 5 * * * /home/xxx/svn-backup/run-backup > /dev/null
    
  2. 在运行备份脚本中,我将输出重定向到 /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
    

这使得我的脚本可以运行!

更新:这实际上也在 stackoverflow 上进行了解释 -https://stackoverflow.com/questions/2323933/crontab-doesnt-finish-svndump

一旦 stderr 输出缓冲区达到一定限制,cron 似乎就会终止执行。

相关内容