Thursday, November 4, 2010

使用strace找出问题根本点

今天想备份一个svn仓库。但是碰到“鬼”了。如下:
$ sudo -u daemon HOME=/tmp /usr/local/subversion/bin/svnsync  sync file:///data/repos/xxoo
svnsync: Revprop change blocked by pre-revprop-change hook (exit code 255) with no output.

看上去是svn的pre-revprop-change hook出了问题。但是无论我怎么折腾pre-revprop-change hook代码都不给力。

又怀疑是环境变量, 连sudo的-E都使用上了还是一个屁用。

无奈下只能使用strace看看:
$ sudo -u daemon HOME=/tmp strace -f /usr/local/subversion/bin/svnsync  sync file:///data/repos/xxoo 2>&1 |less

一定要使用-f, 因为svnsync产生了子进程, 这样可以连子进程都可以被trace。

看到一句相当可疑的trace条目:
[pid  6548] chdir(".")                  = -1 EACCES (Permission denied)

呃。。。。。细节。原来work directory是~, 切换成daemon运行的svnsync没有权限。。。。。

这样就没有问题了:
$ cd / && sudo -u daemon HOME=/tmp /usr/local/subversion/bin/svnsync  sync file:///data/repos/xxoo

真是细节。

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.