場景:
近日發現有一台機器tmp文件夾下放置的文件無辜丟失,而且排查發現是自動丟失,並且,只是刪除10天之前的文件。
本來以為是哪位寫了一個自動執行腳本, find了一下10天前的文件刪除了。
結果,排查所有用戶的crontab計划,沒有任何用戶執行了自動腳本。
監測了一下服務器登錄情況,在刪除文件期間也沒有任何人登錄。
解釋:
最終,通過不懈的百度,終於找到正解。
從/var/log/cron日志中發現,服務器除了調用用戶的計划任務外,還會執行系統自己的,比如:
/etc/cron.hourly
/etc/cron.daily
進入/etc/cron.daily
可以看到一個tmpwatch
cat tmpwatch #output flags=-umc /usr/sbin/tmpwatch “$flags” -x /tmp/.X11-unix -x /tmp/.XIM-unix \ -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix 240 /tmp /usr/sbin/tmpwatch “$flags” 720 /var/tmp for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do if [ -d "$d" ]; then /usr/sbin/tmpwatch “$flags” -f 720 “$d” fi done
可以看到調用了一個叫tmpwatch的腳本,並且,我們可以看到傳入參數中對我們有意義的有/tmp 240
然后我們man tmpwatch
SYNOPSIS tmpwatch [-u|-m|-c] [-MUadfqstvx] [--verbose] [--force] [--all] [--nodirs] [--nosymlinks] [--test] [--fuser] [--quiet] [--atime|--mtime|--ctime] [--dirmtime] [--exclude <path>] [--exclude-user <user>] <hours> <dirs>
有一個 hours
240 = 10*24正好是10天
具體原因是tmp是一個特殊的文件夾,系統會自動清理,所以大家最好不要把文件放到這個地方,被清理了就不好了。
實例:
1、重啟電腦時自動清除/tmp文件夾下的內容,設置不刪除。
/tmp目錄文件重啟后自動刪除現在知道有Ubuntu和Solaris系統。
經常會把臨時性的log或抓包等文件放在/tmp目錄下,重啟后發現文件都丟失了。查下資料發現,可以通過設置解決這個問題。
在/etc/default/目錄下有個rcS文件,文件內容如下:
# # /etc/default/rcS # # Default settings for the scripts in /etc/rcS.d/ # # For information about these variables see the rcS(5) manual page. # # This file belongs to the "initscripts" package. TMPTIME=0 SULOGIN=no DELAYLOGIN=no UTC=yes VERBOSE=no FSCKFIX=no RAMRUN=no RAMLOCK=no
紅色字體TMPTIME=0。值為0表示重啟后刪除文件,值為-1就不會自動刪除文件,值為正整數表示/tmp目錄下文件保留時間。
疑問:
1、然后發現tmpwatch在Ubuntu 16.04上是沒有的!然后經過查找發現以上說的實例1針對的是Ubuntu,而解釋是針對CentOS。
2、而啟動時會清除/tmp文件夾是針對Ubuntu,而其它Linux發行版不一定會清除。
3、Ubuntu想要使用tmpwatch需要額外的安裝。
參考:
http://www.tuicool.com/articles/6Jj6rq(以上內容部分轉自此篇文章)
http://blog.chinaunix.net/uid-26212859-id-3567875.html(以上內容部分轉自此篇文章)
https://www.chrisyue.com/linux-server-tmp-dir-auto-clean.html
https://askubuntu.com/questions/717661/package-for-tmpwatch(針對Ubuntu的安裝包)