SVN 命令在 shell 中有效,但在 cron 中无效。为什么?

SVN 命令在 shell 中有效,但在 cron 中无效。为什么?

我使用 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。你可以

  1. 源 .bashrc 或者有一个脚本可以帮你完成所有操作
  2. 使用完全限定的应用程序名称,而不是可以使用的简单命令,因为 /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 封装中工作。

相关内容