服务器一般是要求长期连续运行的,自动执行任务生成的各种文件及日志,可能使空间占满,从而造成业务故障,所以要定时清理。
一般来说,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 *