我有一个脚本,我正在从一台服务器迁移到另一台服务器。在前一个上它工作正常,但现在在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
注意:
su
为myuser
并运行脚本,一切都很好root
和myuser
的路径相同(完全相同)svn
二进制文件其他所有方法都失败了,是否有某种方法可以查看stderr
或其他输出,希望至少看到一条简单的错误消息。
其他信息:
谢谢@LazyBadger。只是看到错误终于让我这样:
/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
答案 0 :(得分:1)
<强>相依强>
*/1
是糟糕的想法(tm) svn info
file:///
协议成功运行没有任何意义:基于文件的访问不使用任何身份验证授权方法和(或)特定于SVN的ACL,可以(在理论)阻止访问http-repo 相关强>
svn info
的stderr,例如svn info http://svn.corp.com/svn/repo1 >> /opt/update-remote.log 2>&1
*/1
无法从远程端获得任何响应