Linux的/tmp文件夹定期清空相关问题

情况描述

  • 之前在将数据倒入mysql的时候遇到了一个问题:mysql的默认导入文件夹是/tmp文件夹,在别的文件夹可能会因为访问权限问题导致无法成功导入。于是索性就在/tmp文件夹下建立了一个专门用于存放导入文件的文件夹。谁知道今天跑进去一看,/tmp文件夹竟然被自动清空了。
  • 接触过Linux的同学可能会知道,/tmp文件夹是Linux系统用于存放临时文件以及各种各样生成的垃圾的文件夹;基于这一定位,Linux系统会定期对/tmp文件夹进行清理。也许这种定期的清理就导致了存放在/tmp文件夹下文件的丢失。

解决方案探究

1. 谁动了我的/tmp文件夹

  • 经过查阅资料,我了解到Linux系统下自带的一个叫tmpwatch的程序。内容如下:
    [root@DB-Server ~]#  more /etc/cron.daily/tmpwatch
    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_*' 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
    [root@DB-Server ~]# 
    

上述源码源自博客https://blog.csdn.net/qq_43688472/article/details/87872293

  • 其中有一行写着/usr/sbin/tmpwatch "$flags" -f 720 "$d"。这里的720,根据参数,最终会被解析为“720小时”,换算成天就是30天做一次清理。这里的时间单位是根据参数决定的,具体参数可以查看上述博客。
  • 顺带一提,好像不同的Linux操作系统会有不同的tmpwatch策略——其实也就是清理的时间不一样。比如Ubuntu就是每次开机自动清理,而这里的代码实现为30天清理一次。

2. 解决思路

  1. 可以通过强行更改/tmp文件夹的清理时间来保护/tmp文件夹下的垃圾——治标不治本。比如将上述源码中的720变成一个天文数字,这样基本不会删除。
  2. 舍弃/tmp文件夹,弄一个正经的文件夹来存放文件。
    mkdir /Users/appti/tempfiles
    chmod -R 777 /Users/appti/tempfiles
    # 7即代表有读、写和执行的权限。“三”是指三种不同的对象,User,Gourp,Other。即文件所有人,文件所有组,和其他人。
    
    尝试使用mysql从上述新建文件夹读取.csv文件,成功;
    mysql的默认读取文件夹是/tmp,但是其实任意一个权限为777的文件夹都可以顺利读取。所以还是不要把数据放在/tmp这种会被定期清理的文件夹了。
发布了14 篇原创文章 · 获赞 2 · 访问量 4997

猜你喜欢

转载自blog.csdn.net/APPTITE/article/details/104774844
今日推荐