SVN命令在shell中工作,但不在cron中。 为什么不?

我使用cron在一个文件目录上每晚运行一个'svn',这个文件需要在本地保持最新状态,而其他人则正在处理它们。 这用于很好地工作,一个简单的:

/ usr / bin / svn up / path / to /目录

然而,自从我更新到OS X Lion有一天,上面的命令在shell(bash)中工作正常,但是当它从cron运行时,我得到

身份validation领域:<https://my-server.com:443> my-server.com“my.username”的Subversion版本库密码:身份validation领域:<https://my-server.com:443> my-server .com Subversion版本库用户名:svn:OPTIONS of'https://my-server.com/path/to/directory':授权失败:无法validation服务器:拒绝基本挑战(https://my-server.com )

我拼命尝试添加–config-dir命令,但它没有效果。 auth证书看起来很好,在任何情况下,他们在bash中工作。 我知道自己很危险,但是我在这里工具的末尾。

有人能指出我正确的方向吗?

这很可能是由于这样一个事实:相同的env没有像在标准shell中那样加载cron。 你也可以

  1. 源.bashrc或有一个脚本,这一切都为你
  2. 使用完全限定的应用程序名称而不是您可以使用的简单命令,因为/ usr / bin在$ PATH上

svn正在寻找保存在/home/username/.subversion/auth中的authentication信息。 但正如Mike所说,cron下的env是不一样的,$ HOME可能是不同的。 在运行'svn'之前尝试设置$ HOME。

在/ etc / crontab中:

0 0 * * * username export HOME=/home/username; /usr/bin/svn up /path/to/update 

在这个非常相关的线程中,用户发布了一些显然使ssh-agent工作的模糊语法。 这个线程不是svn特定的,但看起来是完全相同的问题。 https://apple.stackexchange.com/questions/18832/ssh-under-cron-stops-working-in-os-x-10-7-lion

创build一个新的shell脚本,它包含你的SVN命令。 然后把这样的东西放在cron中:

 /bin/bash /path/to/your/script.sh 

这将确保你的命令在bash包围中工作。

在OSX上,你不应该使用cron你应该使用launchdlaunchctl

这是一篇很好的文章,描述了执行计划任务的OSX方式。