2012-05-18 161 views
0

我有一个很奇怪的问题。在我的一个Hudson部署框中,工作副本文件夹(基本上是一个SVN签出)不断被删除每晚。不是一个大问题;大多是奇怪而烦人的。因此,每天早上,我必须执行全面结帐,而不是更新/切换。据我所知,这不是Hudson中的配置问题,而且我已经检查过每个crontab文件来验证它不是这样。Bash命令 - 删除目录

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

回答

0

您可能会运行到JENKINS-8880其中在节点的工作区/目录自定义工作区的夜间删除。修补程序是升级到1.427(或更高版本),或将自定义工作区放在工作区/目录之外。

1

我碰到类似的东西 - 我做了两件事。首先,我打开完整的系统记帐 - 这记录了什么过程被执行以及何时执行。您可以通过查看父目录的最后一个mod时间缩小“when”的范围。

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

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

1

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

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

在BSD(FreeBSD的/的NetBSD /等),使用:

sudo chflags schg /path/to/directory_or_file 

在Linux中,使用:

sudo chattr +i /path/to/directory_or_file 

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

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

[[email protected] ~]$ mkdir zzz zzz/foo 
[[email protected] ~]$ touch zzz/bar 
[[email protected] ~]$ sudo chflags schg zzz 
[[email protected] ~]$ touch zzz/baz 
touch: zzz/baz: Operation not permitted 
[[email protected] ~]$ touch zzz/foo/baz 
[[email protected] ~]$