Linux 定時清除日志


一、原因

     寫這篇的原因是項目中log沒有定時清除,服務器上項目是用腳本啟動,log文件只會在啟動時生成一次,這時,由於項目在不斷運行中,導致log越來越大。如果刪除log文件,還得把項目停掉在啟動,這樣顯然是不行的,而如果直接刪掉log文件的話,后續的操作不會輸出,也沒有日志文件生成,這時就只能通過寫個腳本定時去清除日志(每日一清)。

 

二、分析

    這里可以看到在local目錄下有8個文件夾,即8個項目,右邊圖為某一個項目下的具體的log。

    

      

 

 

三、方法

 

    這時我想的肯定是希望能寫一個腳本把這些日志清除掉,但不是刪除掉。那么現在需要實現3步:

         1.找到8個項目的log的位置

         2.清除log內容

         3.定時執行腳本

 

   有了思路,查找了資料后,找到了幾個相關的命令: 

 

     find . -name 'p.*.log'

     .:具體目錄下,建議最好寫出查詢的具體的目錄,類似,/var/local/  

      'p*.log':模糊查詢p開頭.log結尾的文件

 

    find /var/local/ -name 'p*.log' -type f -print :將符合的文件打印出來:

   

 

   找到了log文件后這時我們只需要清除就好了:

   find -name -exec  command:find的常用命令結構中有這樣一條,具體的可以自行去百度。

   清除文件的命令:

   truncate -s 0 aa.txt {} \;        : 切記,這里的“;”號不能省略, 意思是將aa.txt的大小變成0M,即把aa.txt的內容清空了。百度truncate的用法。

   rm -rf/-r  xxx   :這個是刪除文件或文件夾,不能達到我的要求

 

   結合上面的命令,就有了如下這樣一條:

    find /var/local/ -name 'p*.log' -type f -print -exec truncate -s 0 {} \;            : 將符合這樣一個條件的文件查到出來並賦予它0M的大小。

 

  下面我們就可以清除日志的腳本了,如何寫就不講了:

                                                                                                   

 1 #!/bin/bash
 2 
 3 status(){
 4   date 
 5   find /var/local/ -name 'p*.log' -type f -print -exec truncate -s 0 {} \;
 6   echo "清空log成功"
 7   return
 8 }
 9 
10 case "$1" in 
11     status)
12         status;;*)
13             echo "清除失敗"
14 esac

 

四、定時任務

    常用命令:

   crontab -l    :查看定時任務

   crontab -e    :添加任務

   crontab -r   :刪除任務

   cat  /etc/crontab    :查看crontab文件

   

    現在我們來添加一條任務:

     59 23 * * * /var/local/clearlog.sh status >>/var/local/clear.txt        :每天23:59執行腳本並輸出到clear.txt文件 ,定時任務的寫法:*(分)  *(時) *(日) *(月) *(周)  command

 

     添加好后查看(crontab -l ),會發現有一條任務(為方便測試,這里可自行替換周期,如:*/1 * * * *   :每分鍾執行一次 ):

    

   

     這是可能出現clear.txt生成了。但是沒有內容,日志也沒清除,這個原因可能是你沒給這個腳本賦權限:

     chmod 755 clearlog.sh

    

 

      PS:再解決這個問題過程中,碰到了一個問題,那就是在編輯一個文件時,寫完后習慣性的CTRL+S,然后窗口就不能編輯了,退也退不了,后來查了,發現:

             Ctrl s    暫停該終端  (解決辦法:Ctrl q)

             Ctrl c   中止當前正在執行的程序。
             Ctrl d   相當於exit命令

     OK。

 

 

  

 

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM