事情的起因
今天本來調休的。
但是故障是不會休息的,於是就在家里辦公了。
下午下班的時候,同事發消息給我,問我為什么她的定時任務不能夠執行。
我的第一反應就是:/etc/security/access.conf限制了普通用戶的crond,登陸之后證明我是錯誤的,事實上的確如此:所有節點是放開普通用戶的定時任務權限的。
那么問題出在哪里,驗證一下不就知道了。
我用自己的普通用戶登陸系統之后,編輯了一個測試任務如下:
# crontab -e
*/1 * * * * date >> /home/liwl/hello_test.txt
保存退出之后,一分鍾過后,發現了生成了hello_test.txt文件。那么系統層面應該是沒毛病的。
我切換到她用戶的家目錄下,在隱藏目錄.rms下找到了她的腳本:cleanup.sh
很直白的工作:清除垃圾
# vim cleanup.sh
,如下:
#!/bin/sh
file=`ls |grep -v cleanup.sh|xargs`
rm -rf $file
腳本看起來挺清爽的,粗略看一下,並無毛病:
查找目錄下的所有文件,刪除除腳本之外的所有東西
然后我通過# crontab -e
查看了一下她的定時任務寫法:
*/1 * * * * /home/ligl/.rms/cleanup.sh
感覺沒什么毛病啊?!
不管了,先測試腳本能不能執行
災難的開始
定時任務無法執行,那就手動執行一下試試看:
# cd /home/ligl/.rms/
# ./clearup.sh && ls -l
沒毛病啊,文件妥妥都刪掉了。那定時任務為啥不能夠執行呢?難不成絕對路徑不行?
然后,我# cd /home/ligl/.rms/ && touch hello
以# /home/ligl/.rms/cleanup.sh
OK,執行完畢,# ls -l
看一下,卧槽! hello還在! 什么情況?!
無奈之下我# cd
了一下,#ls
更絕望的事情發生了!!!
家目錄下空的!!!空的!!!
我突然明白過來發生什么事情了,趕緊電話同事,確認一下是不是數據還在。
同事被我這么一下,也是懵逼了。但是她ls 之后發現,數據還在啊!!!
我不信!!!
我重新登陸,ls 空的,再退出登陸ls ,還是空的!從其他節點登陸,ls 空的,絕望了......
rm -rf 的事情,發生在我一個系統管理員身上了....
可是同事的數據,已經無法恢復了。
怎么辦?怎么辦?
絕處逢生
突然同事問我,為什么她那邊ls可以看到數據呢?
我也很奇怪,但是突然想起來了:
我們的用戶家目錄是在NAS上的,用戶的數據放置在全局文件系統,通過軟連接的方式進入全局文件系統
那也就是說,其實我刪掉的是她家目錄下的軟鏈接。她能夠ls,是因為沒有exit出bash環境。
可是為什么我會刪除數據呢?
分析了一下定時任務的腳本發現,發現
file=`ls |grep -v cleanup.sh|xargs`
當以絕對路徑(定時任務)執行腳本時,這個ls是沒有目標目錄的,ls默認家目錄,然后刪除了家目錄。
為什么沒有刪除真實數據,而是軟件鏈接呢?
rm -rf link刪除軟連接文件
rm -rf link/ 刪除軟連接和真實數據
重新創建鏈接,查看正在運行的業務,正常的。好了,到此算是一場驚嚇結束了。
總結
雖然腳本不是我寫的,但是腳本是我執行的....
總之,感覺是被軟連接救了我的前途。
還有啊,腳本能不能認真寫,目標文件寫成全局變量啊,命令要加參數啊,參數不是你想的那樣,要你指定的那樣,先調試好再說啊,調試不是簡單執行一下就OK的.....
至於到底是不是我的手動執行刪除了她的家目錄數據 ,還是定時任務刪除的,當時沒在意,不得而知了.....