我使用 cron 每晚在文件目录中运行“svn up”,我需要在其他人处理这些文件时本地更新这些文件。这曾经工作得很好,只需简单操作:
/usr/bin/svn up /路径/到/目录
但是,自从我前几天更新到 OS X Lion 以来,上面的命令在 shell(bash)中运行良好,但是当它从 cron 运行时,我得到
身份验证领域:<https://my-server.com:443> my-server.com Subversion 存储库“my.username”密码:身份验证领域:<https://my-server.com:443> my-server.com Subversion 存储库用户名:svn:'https://my-server.com/path/to/directory' 的选项:授权失败:无法向服务器进行身份验证:拒绝基本挑战(https://my-server.com)
我拼命尝试添加--配置目录执行该命令,但没有效果。授權凭证看起来不错,而且无论如何它们在 bash 中都能正常工作。我知道的足够多,足以造成危险,但我的工具已经用完了。
有人能给我指明正确的方向吗?
答案1
svn 正在寻找保存在 /home/username/.subversion/auth 中的身份验证信息。但正如 Mike 所说,cron 下的环境不同,并且 $HOME 可能不同。尝试在运行“svn up”之前设置 $HOME。
在 /etc/crontab 中:
0 0 * * * username export HOME=/home/username; /usr/bin/svn up /path/to/update
答案2
这可能是因为同一个环境没有像在标准 shell 中那样加载 cron。你可以
- 源 .bashrc 或者有一个脚本可以帮你完成所有操作
- 使用完全限定的应用程序名称,而不是可以使用的简单命令,因为 /usr/bin 位于 $PATH 上
答案3
在这个非常相关的帖子中,一位用户发布了一些晦涩难懂的语法,这些语法似乎可以让 ssh-agent 正常工作。这个帖子不是针对 svn 的,但似乎与此问题完全相同。 https://apple.stackexchange.com/questions/18832/ssh-under-cron-stops-working-in-os-x-10-7-lion
答案4
创建一个新的 shell 脚本,其中包含您的 SVN 命令。然后在 cron 中输入如下内容:
/bin/bash /path/to/your/script.sh
这将确保您的命令在 bash 封装中工作。