【问题标题】:Executing svn info in cronjob fails agianst remote server在 cron 作业中执行 svn info 对远程服务器失败
【发布时间】:2014-05-29 10:18:52
【问题描述】:

我有一个脚本要从一台服务器迁移到另一台服务器。在前一个上它运行良好,但现在在 cronjob 中运行时调用 svn info 失败。如果我 sucron 使用的同一用户相同,则相同的呼叫可以正常工作。只有当它是http:// url 时调用才会失败;对file:/// url 的 info 调用工作完美。

这是安装了最少软件的普通 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

【问题讨论】:

    标签: svn cron centos


    【解决方案1】:

    不相关

    • cron 中的 */1Bad Idea (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
    • 只是想法。在“某些情况下”,您的连接超时可能超过 1 分钟,并且*/1 无法从远程端获得任何响应
    • 围绕您的第一个音符。无法回忆在某些用户和 shell 中的同一用户下执行的 cron-job 的环境差异,但它们可能存在

    【讨论】:

    • 在不相关的...我知道,这是为了测试,所以我不必等待 5 分钟(对于活动的回购)。不确定检查远程更改的更轻量级的方法(感兴趣)...而且我知道 file:/// 不相关,这只是为了表明 svn 在 cron 作业中工作。相关:我将更改重定向并做出响应。确实会发生连接超时(但非常罕见,通常
    • @AndrewBacker - 轻量级 ideassvn ls -v URL | head -n 1 |...svn log -q URL | grep "|" | gawk {print $1}。更有用的方式 - 使用推送而不是拉取,即在提交后挂钩 的 repo 端以通知提交
    • 我看不出svn log 是如何更轻量级的。 svn ls 可能有效,但它似乎与简单的info 差不多(或更多?)。对于推动,那是不行的。我花了两年时间才让他们最终在提交中添加评论长度检查。
    • 是的,你是对的,2>&1 给了我错误(身份验证错误)。不知道为什么它在作为 cron 运行时尝试使用登录用户名而不是缓存的凭据(在这个盒子上!)。
    猜你喜欢
    • 2013-07-31
    • 1970-01-01
    • 2023-03-13
    • 2018-10-13
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 2014-06-21
    • 2013-06-18
    相关资源
    最近更新 更多