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這種會被定期清理的文件夾了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章