2012-05-18 158 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] ~]$