服務器一般是要求長期連續運行的,自動執行任務生成的各種文件及日志,可能使空間占滿,從而造成業務故障,所以要定時清理。
一般來說,Linux空間占滿有如兩種情況:
1、空間被占滿了
用df -k 可以看到使用100%,這種 情況下,滿的分區無法新建文件,也無法輸出日志,需要輸日志的進程一般都會停止工作
2、inode占滿了
inode如何理解呢,就是一個文件 對應一個inode,而linux各個分區可用的inode一般是有限的,使用df -i 可以查看使用情況。一般經常出現硬盤空間沒占滿,但inode占滿了,這種一般是因為有大量的小文件生成,要刪掉
要定時清理空間,我們需要了解一個命令,find 命令,這個命令可以查詢目錄下特定文件名,生成日期的文件
舉例如下:
find /slvi/apache/htdocs/nos/netflow/netflow/View/Report/Day/R-NF-543* -type f -mtime +10
上面的就是查詢 /slvi/apache/htdocs/nos/netflow/netflow/View/Report/Day/目錄下文件名開的R-NF-543的文件
-type f 指明是文件,如是-d 剛是目錄, -mtime +10是超過現在10天的,如是10天內,則是-10
上面只是查詢,我們需要查到了,再刪掉,則要加 “ -exec rm -rf {} \; ” ,結果如下:
find /slvi/apache/htdocs/nos/netflow/netflow/View/Report/Day/R-NF-541* -type f -mtime +10 -exec rm {} \;
對於通用的linux來說,/var是各種系統日志輸出分區,建議不要和根分區一起,而是單獨划分區,一般我們划20G(一般夠用,除非你熱衷分析日志),一般我們要清理/var/下面的一些文件及目錄:
/bin/echo '' > /var/spool/mail/root 如果你/var空間經常不夠,可以清一下,當然你應用程序的用戶也要清:
/bin/echo '' > /var/spool/mail/XXXX XXXX代表你普通用戶
下面這兩個一般是郵件隊列里發的,需要清理,不然可能造成/var/滿,或inode占滿,因為很多小文件:
/bin/find /var/spool/clientmqueue/* -type f -mtime +7 -exec rm -rf {} \;
/bin/find /var/spool/mqueue/* -type f -mtime +7 -exec rm -rf {} \;
上面說是7天清一次
/var/log/下面很多日志是循環的,一般保存4個文件,對系統分析很重要,所以可以根據自己情況,決定清與不清,或保存多長時間:
echo ''>/var/log/maillog.3 清第三個文件,離最近時間最長
/var/log/messages.3 清第三個文件,離最近時間最長
上面這個命令,可以放在一個統一的shell里,然后把shell再放入crontab里自動運行。當然需要你長期觀察,發現有其它要清的,也放入shell,包括你自己的應用程序輸出的日志及文件。
還要提醒,要用find時,先不加后面的刪除命令,先看找出來是否正確,是否是你需要刪,再加上刪除,免得你在根目錄執行rm -rf *