为什么我的svn备份shell脚本,在终端上工作正常,但在crontab中失败?

时间:2010-12-27 04:54:02

标签: bash cron crontab svn

我在redhat linux中有一个svn备份脚本。我们称之为svnbackup.sh

当我在终端中运行时,它工作正常。

但是当我把它放入crontab时,它不会使svnserve恢复,即使数据被正确备份。

我怎么了?

killall svnserve
tar -zcf /svndir /backup/
svnserve -d -r /svndir

2 个答案:

答案 0 :(得分:3)

通常,“环境”是cron作业中的问题,当在“终端”运行时有效,而不是由cron运行时。最有可能的是,您的PATH未设置为包含保留svnserve的目录。

使用svnserve的绝对路径名或在脚本中适当地设置PATH。

您可以通过添加以下行来部分调试:

env > /tmp/cron.job.env

到您的脚本,以确切了解运行cron作业时环境的设置。

答案 1 :(得分:0)

如果您尝试备份存储库的实时版本,则可能应该使用svnadmin hotcopy。也就是说,这里有一些可能出现的错误可能性:

  1. 您已将每个语句作为单独的条目放在crontab中(无法从Q中判断)。
  2. svnserve命令接受密码,而cron又无法提供密码。
  3. svnserve命令无限期阻塞或挂起并被cron杀死。
  4. 命令svnserve不在您的PATH中的cron。
  5. 假设svnserve没有输入密码,这可能会解决问题:

    #! /bin/bash
    #  backup_and_restart_svnserve.sh
    export PATH=/bin:/sbin:/usr/bin:/usr/local/bin # set up your path here
    killall svnserve && \
    tar -zcf /svndir /backup/ && \
    svnserve -d -r /svndir >/dev/null 2>&1 &
    

    现在,使用“backup_and_restart_svnserve.sh”作为要执行的脚本。由于它在后台运行,因此即使cron执行下一个任务,也应该继续运行。