![](/img/trans.png)
[英]Debian bash script works fine from command line; fails in crontab
[英]why my svn backup shell script, works fine in terminal, but fails in crontab?
我在redhat linux中有一个svn备份脚本。 我们称之为svnbackup.sh
当我在终端中运行它时,它工作正常。
但是,当我将其放入crontab中时,即使正确备份了数据,它也不会恢复svnserve。
我怎么了?
killall svnserve
tar -zcf /svndir /backup/
svnserve -d -r /svndir
通常,“环境”是cron作业中的问题,该作业在“终端”上运行时有效,而在cron上运行时则无效。 最有可能的是,您的PATH未设置为包含保留svnserve
的目录。
为svnserve使用绝对路径名,或在脚本中适当设置PATH。
您可以通过添加以下行来部分调试:
env > /tmp/cron.job.env
查看脚本,以确切了解运行cron作业时设置的环境有多少。
如果要备份存储库的实时版本,则可能应该使用svnadmin hotcopy
。 就是说,关于可能出了什么问题,我想到了一些可能性:
svnserve
命令使用密码,而cron则不能提供该密码。 svnserve
命令无限期地阻塞或挂起,并被cron杀死。 svnserve
命令不在cron的PATH中。 假设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执行下一个任务,它也有望继续运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.