服务器的tmp文件夹满了,导致不能正常登陆和运行软件,需要清理tmp文件夹下面的临时文件。Linux的机制是在重启的时候清理tmp文件夹,或者一段时间才删除(比如下面我们看到的服务器默认是10天),find命令和tmpwacth命令可以在不重启和不影响用户的情况下快速删除目标文件。

Find命令

1
2
# ctime即change time文件状态改变时间为超过一天的
find /tmp -ctime +1 -exec rm -rf {} \;

tmpwatch

1
2
3
4
5
yum install tmpwatch -y
# 超过一天
tmpwatch 1d /tmp
# 超过32小时
tmpwatch -afv 32 /tmp/

定时清理

CentOS 6

看到说在CentOS下的/etc/cron.daily/tmpwatch可以设置自动清理时间,但我没找到,-_-||,例如下面设置的是/var/tmp下30d,也就是30天,/tmp下10天,但服务器/usr/sbin下面并没有tmpwatch,如果大家的服务器上有这个,可以通过这个设置定期清理一定时间的文件。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#! /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

CentOS 7

原来是CentOS7下新工具systemd-tmpfiles替换了tmpwatch。CentOS7的清理频率为开机15min或者上次服务出发后的24小时

1
2
3
4
5
cat /usr/lib/systemd/system/systemd-tmpfiles-clean.service

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

具体的配置时间可以调整,下面显示的是CentOS7默认删除/tmp下超过10天的文件,/var/tmp下超过30天的文件

1
2
3
4
5
cat /usr/lib/tmpfiles.d/tmp.conf

# Clear tmp directories separately, to make them easier to override
v /tmp 1777 root root 10d
v /var/tmp 1777 root root 30d

更改之后重新加载服务

1
2
3
sudo systemctl daemon-reload

sudo systemctl enable --now systemd-tmpfiles-clean.timer