我在redhat linux中有一个svn备份脚本。我们称之为svnbackup.sh
当我在终端中运行时,它工作正常。
但是当我把它放入crontab时,它不会使svnserve恢复,即使数据被正确备份。
我怎么了?
killall svnserve
tar -zcf /svndir /backup/
svnserve -d -r /svndir
答案 0 :(得分:3)
通常,“环境”是cron作业中的问题,当在“终端”运行时有效,而不是由cron运行时。最有可能的是,您的PATH未设置为包含保留svnserve
的目录。
使用svnserve的绝对路径名或在脚本中适当地设置PATH。
您可以通过添加以下行来部分调试:
env > /tmp/cron.job.env
到您的脚本,以确切了解运行cron作业时环境的设置。
答案 1 :(得分:0)
如果您尝试备份存储库的实时版本,则可能应该使用svnadmin hotcopy
。也就是说,这里有一些可能出现的错误可能性:
svnserve
命令接受密码,而cron又无法提供密码。svnserve
命令无限期阻塞或挂起并被cron杀死。svnserve
不在您的PATH中的cron。假设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执行下一个任务,也应该继续运行。