Bash命令 - 目录删除

时间:2012-05-18 01:33:43

标签: svn jenkins directory hudson

我有一个非常奇怪的问题。在我的一个Hudson部署的盒子上,工作副本文件夹(基本上是一个SVN结帐)每晚都会被删除。不是一个大问题;大多是奇怪和烦人的。因此,每天早上,我必须执行完整的结账而不是更新/切换。据我所知,这不是Hudson中的配置问题,我已经检查了每个crontab文件以验证它不是那个。

在Linux中,是否有一个bash脚本或一些命令行魔术来观察文件夹,保存关于何时删除它的历史记录以及删除它的人?这样,我可以缩小执行实际删除的范围。

3 个答案:

答案 0 :(得分:1)

我跑过类似的东西 - 我做的是双重的。首先,我启用了完整的系统记帐 - 这记录了执行的进程和时间。您可以通过查看父目录的最后一个mod时间来缩小“when”的范围。

但我认为会计日志不会显示足够的细节(流程参数,父流程等 - 这是在Solaris上,您可能会在Linux上获得更多的日志记录选项)。所以我最终做的是重命名“rm”,并在记录输入参数后,编写一个名为“rm”的shell脚本,调用输入参数,该进程调用它,并且拥有调用进程。

如果进程正在调用unlink系统调用而不是rm,那么您可能不得不求助于获取C库的源代码并为unlink调用添加类似的日志记录功能。

答案 1 :(得分:1)

我不确定这个问题应该标记为“bash”。许多事情可能是删除这个文件夹,而bash不包含任何自己的代码来实际删除。

追踪正在发生的事情的一个选项是无法删除目录,然后查看Hudson(或其他地方)的某些内容是否存在错误。您可以在父文件夹或其中的任何文件上设置“immutable”标志,删除将失败。

在BSD(FreeBSD / NetBSD / etc)中,使用:

sudo chflags schg /path/to/directory_or_file

在Linux中,使用:

sudo chattr +i /path/to/directory_or_file

现在,确保你实际上获取(而不是过滤或空交付)所有root和cron消息,调高Hudson中的调试级别(如果它有一个,我有不知道),然后观察并看看会发生什么。

请注意,如果将不可变标志(或schg)添加到文件夹,则不会保护子文件夹的内容。它只能删除目录,或添加或删除文件。

[ghoti@pc ~]$ mkdir zzz zzz/foo
[ghoti@pc ~]$ touch zzz/bar
[ghoti@pc ~]$ sudo chflags schg zzz
[ghoti@pc ~]$ touch zzz/baz
touch: zzz/baz: Operation not permitted
[ghoti@pc ~]$ touch zzz/foo/baz
[ghoti@pc ~]$ 

答案 2 :(得分:0)

您可能会遇到JENKINS-8880,其中每晚删除节点工作区/ 目录中的自定义工作区。修复方法是升级到1.427(或更高版本),或将自定义工作区放在工作区/ 目录之外。