我使用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。 你也可以
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
你应该使用launchd
和launchctl
。
这是一篇很好的文章,描述了执行计划任务的OSX方式。