在cron作业中执行svn info对远程服务器失败

时间:2014-05-28 10:23:54

标签: svn cron centos

我有一个脚本,我正在从一台服务器迁移到另一台服务器。在前一个上它工作正常,但现在在cronjob中运行时svn info的调用失败了。如果su作为同一用户cron使用,则同一调用可以正常工作。该呼叫仅在http://网址时失败;对file:///网址的信息调用完美无缺。

这是一款vanilla CentOS 6.5服务器,安装了最少的软件(svn 1.6.11

#cron 
*/1  *  *  *  * myuser /opt/update-stuff.sh >> /opt/update-stuff.log
#/1 is for testing this right now... got tired of waiting

脚本看起来有点像这样,但更长。只有一个呼叫失败

# update-stuff.sh
# this call just outputs blank.  I can't tell what is failing 
echo ==[ remote test ]==
svn info http://svn.corp.com/svn/repo1

# this call works just fine.  not an auth test, just to show svn is working
echo ==[ local test ]==
svn info file:///opt/mirrors/repo1

注意:

  • 如果我sumyuser并运行脚本,一切都很好
  • rootmyuser的路径相同(完全相同)
  • 我将脚本简化为这两行,并且仍然得到相同的
  • 已验证使用相同的svn二进制文件
  • 已验证的cron实际上是以该用户身份运行的:D

其他所有方法都失败了,是否有某种方法可以查看stderr或其他输出,希望至少看到一条简单的错误消息。

其他信息:

谢谢@LazyBadger。只是看到错误终于让我这样:

  • Cron没有设置用户的环境。
  • 看来(虽然我不是专家),/etc/bashrc和其他人没有运行

解决方案:

在最终得到错误之后,我尝试强制svn使用u / p。这有效,但它抱怨保存身份验证信息。所以我编辑.subversion/servers。还是抱怨。因此,在脚本中添加set。查看未设置的环境变量(错误的主页)。去谷歌!然后是一个偷走the answer that helped me from serverfault.com

的网络刮刀
# *  *  *  *  * user-name command to be executed

# use root user, and 'su' to get the same environment as if the user logged in
*/5  *  *  *  * root su - myuser /opt/update-stuff.sh >> /opt/update-stuff.log 2>&1

1 个答案:

答案 0 :(得分:1)

<强>相依

    cron中的
  • */1糟糕的想法(tm)
  • 为了检测远程仓库中的新提交,您可以使用比svn info
  • 更轻量级且更易于解析的svn命令
  • 使用file:///协议成功运行没有任何意义:基于文件的访问不使用任何身份验证授权方法和(或)特定于SVN的ACL,可以(在理论)阻止访问http-repo

相关

  • 为了查看日志中的所有输出,还要重定向svn info的stderr,例如svn info http://svn.corp.com/svn/repo1 >> /opt/update-remote.log 2>&1
  • 只是想法。在&#34;某些条件下&#34;您的连接超时可能超过1分钟,*/1无法从远程端获得任何响应
  • 围绕你的第一个音符。无法回想起在某些用户和shell中的同一用户下执行的cron-job的环境差异,但他们可能存在