阿里云服务器维护总结 – 临时文件清理维护

2015/04/11 13:44 下午 posted in  舶来 技术 comments

本文将给大家介绍linux tmpwatch命令。

什么是tmpwatch命令?

tmpwatch  –  removes  files  which haven’t been accessed for a period of time

如上所言,删除指定的目录中一段时间未访问的文件。一般对于/tmp下的文件或日志文件。

参数

-a或–all  删除任何类型的文件。

-m或–mtime   根据文件被更改时间

-c或–ctime     根据文件更改状态时间

-M或–dirtime  根据文件夹被更改时间

-f或–force  强制删除文件或目录,其效果类似rm指令的”-f”参数。

-l  不删除符号链接

-U或–exclude-user=用户名或uid  排除某用户的文件

-x 或–exclude=path 排除某路径

-X 或–exclude-pattern=pattern 排除某规则下的路径

-q或–quiet  不显示指令执行过程。

-v或–verbose  详细显示指令执行过程。

-test  仅作测试,并不真的删除文件或目录。

另外对于运维人员我要强调一下-d或–nodirs选项, 某些运维人员可能在日志文件夹中创建了子目录,默认子目录也会被删除的,使用-d参数可以避免。

实例

[root@GoGo var]# tmpwatch  -afv 5 /tmp

removing directory /tmp/.esd-500 if empty

removing directory /tmp/pulse-RhVqbteZQHEU if empty

removing directory /tmp/orbit-goface if empty

removing directory /tmp/pulse-ZqCSfKwcdrK4 if empty

removing directory /tmp/orbit-gdm if empty

removing file /tmp/yum.log

另外linux系统会定期删除tmp目录中的内容。原理就是使用了tmpwatch

#vi /etc/cron.daily/tmpwatch

|

#! /bin/sh

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 \

-X '/tmp/hsperfdata_*' 10d /tmp

/usr/sbin/tmpwatch "$flags" 30d /var/tmp

for d in /var/``{cache``/man``,catman}/{``cat``?,X11R6``/cat``?,``local``/cat``?}; do

if [ -d "$d" ]; then

/usr/sbin/tmpwatch "``flags" -f 30d "``d"

fi

done

|

计划任务中有一个tmpwatch,每隔30d定期清除,当然您也可以定制时间。

time_in=date +”%y/%m/%d %H:%M:%S”
echo “Tmp_Watch_dirs.sh start at $time_in”

#deal those dirs should not recur to their subdirs

if [ -d “/data0/vshare/logs” ]
then
exclude_dir=ls -l /data0/vshare/logs/|grep ^d|awk ‘BEGIN{S=””;} {s=sprintf(“%s /data0/vshare/logs/%s”,s,$9);} END{print s;}’
/usr/sbin/tmpwatch -c 1440 -v -x $exclude_dir /data0/vshare/logs
else
echo “/data0/vshare/logs is not exist or not a dir”
fi

#deal those dirs should recur to their subdirs

if [ -d “/data0/vshare/logs” ]
then
/usr/sbin/tmpwatch -c 1440 -v /data0/vshare/logs/vblog1
else
echo “/data0/vshare/logs/vblog1 is not exist or not a dir”
fi

time_out=date +”%y/%m/%d %H:%M:%S”
echo “Tmp_Watch_dirs.sh finish at $time_out”
echo “—————————————————————————”
echo “”

exit 0

文章索引 [隐藏]

tmp目录删除和tmpwatch命令的使用

[@more@]

tmp目录删除和tmpwatch命令的使用

文章来源:http://cjs0550.blog.hexun.com/30760600_d.html

tmp目录里面的文件,会在一定的时间之后被删除掉,删除是通过

cat /etc/cron.daily/tmpwatch

/usr/sbin/tmpwatch -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 720 /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
if [ -d “$d” ]; then
/usr/sbin/tmpwatch -f 720 $d
fi
done
来删除,从上面的代码可以看到tmp目录里面的文件,会在240小时不用之后被删除掉。

其中最重要的命令是tmpwatch,下面是此命令的具体使用方法:

linux tmp 文件清理
系统使用时间长后会产生临时文件(/tmp下),需要清理。但清理的时候不推荐使用rm -rf。这样有时会引起程序的僵死。推荐使用tmpwatch命令来进行清理。关于tmpwatch的说明如下:名称 : tmpwatch
版本 : 2.8.4
发布号 : 5
所属组 : 系统环境/基础 源码包: tmpwatch-2.8.4-5.src.rpm
大小 : 13273 许可类型: GPL
摘要 : 根据文件被访问的时间来删除文件的工具。

简介 :
tmpwatch 工具从指定的目录中递归地搜索,并删除在指定时间段内没有被访问的文件。tmpwatch 一般被用来清扫那些用来临时驻留文件的目录(譬如,/tmp)tmpwatch 忽略符号链接,它不会切换文件系统,而且只删除空目录和常规文件。

语 法:tmpwatch [-afqv][–test][超期时间][目录…]
补充说明:执行tmpwatch指令可删除不必要的暂存文件,您可以设置文件超期时间,单位以小时计算。参数:
-a或–all  删除任何类型的文件。
-f或–force  强制删除文件或目录,其效果类似rm指令的”-f”参数。
-q或–quiet  不显示指令执行过程。
-v或–verbose  详细显示指令执行过程。
-test  仅作测试,并不真的删除文件或目录

实例: sudo /usr/sbin/tmpwatch -afv 3 /tmp (清除/tmp下三小时以内没有使用的文件,并将结果输出)。

效果:
[yyc@localhost ~]$ sudo /usr/sbin/tmpwatch -afv 3 /tmp
removing file /tmp/mapping-yyc
removing file /tmp/orbit-yyc/linc-814-0-1bf6199e48d6e
removing file /tmp/orbit-yyc/linc-7ee-0-74c6cf6b5c2c6
removing file /tmp/orbit-yyc/linc-7fd-0-3ae286a04fa21
removing file /tmp/orbit-yyc/linc-854-0-4e3c22c96ddf
removing file /tmp/orbit-yyc/linc-798-0-1c90b9a4739a7
removing file /tmp/orbit-yyc/linc-7e9-0-56828c5c66be1
removing file /tmp/orbit-yyc/linc-815-0-1e0f6f36a2ee3
removing file /tmp/orbit-yyc/bonobo-activation-server-ior
removing file /tmp/orbit-yyc/linc-850-0-5c3b9d5470bfc
removing file /tmp/orbit-yyc/linc-803-0-5ee49981d2cee

关于Linux系统清理/tmp/文件夹,你可能想知道的

我们知道,在Linux系统中/tmp文件夹里面的文件会被清空,至于多长时间被清空,如何清空的,可能大家知识的就不多了,所以,今天我们就来剖析一个这两个问题。

在RHEL\CentOS\Fedora\系统中(本次实验是在RHEL6中进行的)

先来看看tmpwatch这个命令,他的作用就是删除一段时间内不使用的文件(removes files which haven’t been accessed for a period of time)。具体的用法就不多说了,有兴趣的自行研究。我们主要看看和这个命令相关的计划任务文件。
他就是/etc/cron.daily/tmpwatch,我们可以看一下这个文件里面的内容
#! /bin/sh
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
-X ‘/tmp/hsperfdata_*’ 10d /tmp
/usr/sbin/tmpwatch “$flags” 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
if [ -d “$d” ]; then
/usr/sbin/tmpwatch “\(flags” -f 30d “\)d”
fi
done

这个脚本大家仔细分析一下就明白了,第一行相当于一个标记(参数),第二行就是针对/tmp目录里面排除的目录,第三行,这是对这个/tmp目录的清理,下面的是针对其他目录的清理,就不说了。

我们就来看/usr/sbin/tmpwatch “$flags” 30d /var/tmp这一行,关键的是这个30d,就是30天的意思,这个就决定了30天清理/tmp下不访问的文件。如果说,你想一天一清理的话,就把这个30d改成1d。这个你懂的……哈哈!

但有个问题需要注意,如果你设置更短的时间来清理的话,比如说是30分钟、10秒等等,你可以在这个文件中设置,但你会发现重新电脑,他不清理/tmp文件夹里面的内容,这是为什么呢?这就是tmpwatch他所在的位置决定的,他的上层目录是/etc/cron.daily/,而这个目录是第天执行一次计划任务,所以说,你设置了比一天更短的时间,他就不起作用了。这下明白了吧。
所以结论是:在RHEL6中,系统自动清理/tmp文件夹的默认时限是30天

在Debian\Ubuntu系统中(Ubuntu10.10为实验环境)

在Ubuntu系统中,在/tmp文件夹里面的内容,每次开机都会被清空,如果不想让他自动清理的话,只需要更改rcS文件中的TMPTIME的值。
我们看如何来修改
sudo vi /etc/default/rcS

TMPTIME=0
修改成
TMPTIME=-1或者是无限大
改成这样的话,系统在重新启动的时候就不会清理你的/tmp目录了。
依些类推,如果说要限制多少时间来更改的话,就可以改成相应的数字(本人没有测试,我是这么理解的)

所以结论是:在Ubuntu中,系统自动清理/tmp文件夹的时限默认每次启动

tmp是什么文件?Linux系统清理/tmp/文件夹的原理

.tmp 文件大部分都是因为不正常关机、或死机后所留下的文件,这些临时的暂存盘,在你重新开机后,已经没有任何的用途,可以放心删除。大家在使用Windows操作系统的时候,可能会经常在C盘根目录发现一些后缀名为TMP的文件,还会在Windows目录里发现一个TEMP的目录,TMP文件是各种软件或系统产生的临时文件,也就是常说的垃圾文件。Windows产生的临时文件,本质上和虚拟内存没什么两样,只不过临时文件比虚拟内存更具有针对性,单独为某个程序服务而已。而它的专一性导致了许多新手对他望而生畏,不删占据空间,删了又怕导致程序无法运行。

Windows 在长年累月的使用之下,在 Windows\Temp 里一定会多出很多的「垃圾」,其实这 Temp 里的所有的文件、或文件夹都是可以删除的,有空不妨常常清理下这个 Temp 文件夹,但是要留意一下,我指的是删除 Temp 里的东西(Temp 文件夹还是保留的),不是要你把整个 Temp 连文件夹一起删掉。 当你在删除 Temp 里面的文件的时候,你可能会遇到「存取拒绝」的错误讯息,不要紧,这是很正常的。

因为某些是目前的暂存盘,Windows还正在使用中,你跳过出现存取拒绝讯息的文件,继续删除其它的文件即可. 一般来说,你当前运行着大型的工具软件的时候,都不应该去碰临时文件,比如Photoshop会在处理图形时候产生巨大的临时文件,如果你认为这不是你创建的文件企图删除,可能会导致Photoshop死机。你当前没有运行程序的话,发现的临时文件都可以删除,以免它们天长日久堆积如山,占据磁盘空间还是小事,关键是它们又多又散乱,会给磁盘扫描整理带来时间上的无谓消耗,也可能会造成文件分配表混乱,导致文件交叉链接的错误。但是不能所有的临时文件都一概而论。 比如,C盘根目录的TEMP目录,是很多工具程序临时文件的指向目录,没有这个目录的话,临时文件无法创建,这些工具软件就很可能会出错,所以要删除的话,只应该清空里面的临时文件垃圾,而不能把TEMP这个目录都干掉了;Windows里通常也有一个TEMP文件,是系统默认的临时文件的放置地方,也不建议连目录都删除了,定期清空里面的垃圾即可。

关于Linux系统清理/tmp/文件夹的原理

我们知道,在Linux系统中/tmp文件夹里面的文件会被清空,至于多长时间被清空,如何清空的,可能大家知识的就不多了。

在RHEL\CentOS\Fedora\系统中(本次实验是在RHEL6中进行的)
先来看看tmpwatch这个命令,他的作用就是删除一段时间内不使用的文件(removes files which haven’t been accessed for a period of time)。具体的用法就不多说了,有兴趣的自行研究。我们主要看看和这个命令相关的计划任务文件。
他就是/etc/cron.daily/tmpwatch,我们可以看一下这个文件里面的内容
#! /bin/sh
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
-X ‘/tmp/hsperfdata_*’ 10d /tmp
/usr/sbin/tmpwatch “$flags” 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
if [ -d “$d” ]; then
/usr/sbin/tmpwatch “\(flags” -f 30d “\)d”
fi
done

这个脚本大家仔细分析一下就明白了,第一行相当于一个标记(参数),第二行就是针对/tmp目录里面排除的目录,第三行,这是对这个/tmp目录的清理,下面的是针对其他目录的清理,就不说了。

我们就来看/usr/sbin/tmpwatch “$flags” 30d /var/tmp这一行,关键的是这个30d,就是30天的意思,这个就决定了30天清理/tmp下不访问的文件。如果说,你想一天一清理的话,就把这个30d改成1d。

但有个问题需要注意,如果你设置更短的时间来清理的话,比如说是30分钟、10秒等等,你可以在这个文件中设置,但你会发现重新电脑,他不清理/tmp文件夹里面的内容,这是为什么呢?这就是tmpwatch他所在的位置决定的,他的上层目录是/etc/cron.daily/,而这个目录是第天执行一次计划任务,所以说,你设置了比一天更短的时间,他就不起作用了。这下明白了吧。
所以结论是:在RHEL6中,系统自动清理/tmp文件夹的默认时限是30天

在Debian\Ubuntu系统中(Ubuntu10.10为实验环境)
在Ubuntu系统中,在/tmp文件夹里面的内容,每次开机都会被清空,如果不想让他自动清理的话,只需要更改rcS文件中的TMPTIME的值。
我们看如何来修改
sudo vi /etc/default/rcS

TMPTIME=0
修改成
TMPTIME=-1或者是无限大
改成这样的话,系统在重新启动的时候就不会清理你的/tmp目录了。
依些类推,如果说要限制多少时间来更改的话,就可以改成相应的数字(本人没有测试,我是这么理解的)

所以结论是:在Ubuntu中,系统自动清理/tmp文件夹的时限默认每次启动

阿里云系统盘满了,清理过程

用阿里云云主机,最近发现系统的20G,还剩余不足500M啦。感觉速度都受影响了。

通过du –max-depth=1 -h命令一级一级查找,发现是mysql的日志文件太多了,用了10多个G。

通过如下命令:

[root@aliyunxxx mysql]# /usr/local/mysql/bin/mysql -u root -p

Enter password: (输入密码)

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 6011890

Server version: 5.1.60-log Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> reset master; (清除日志文件)

Query OK, 0 rows affected (8.51 sec)

OK啦。