Linux後臺日誌定時清理腳本

1、 簡介

  linux是一個很能自動產生文件的系統,日誌、郵件、備份等。雖然如今硬盤廉價,咱們能夠有不少硬盤空間供這些文件浪費,讓系統定時清理一些不須要的文件頗有一種爽快的事情。不用你去天天惦記着是否須要清理日誌,不用天天收到硬盤空間不足的報警短信,想好好休息的話,讓咱們把這個事情交給機器定時去執行吧。linux

2、 分析日誌

查看日誌路徑和日誌命名規則:web

要清理這個目錄下面如此命名規則的日誌。shell

3、方法

這時我想的確定是但願能寫一個腳本把這些日誌清除掉,但不是刪除掉。那麼如今須要實現3步:apache

         1.找到全部項目的log的位置bash

         2.清除或者刪除log內容app

         3.定時執行腳本dom

刪除和清空日誌命令:編輯器

find 對應目錄 -mtime +天數 -name "文件名" -exec rm -rf {} \;rest

實例命令:日誌

find /opt/soft/log/ -mtime +7 -name "*.log" -exec rm -rf {} \;

說明:

將/opt/soft/log/目錄下全部7天前帶".log"的文件刪除。具體參數說明以下:

find:linux的查找命令,用戶查找指定條件的文件;

/opt/soft/log/:想要進行清理的任意目錄;

-mtime:標準語句寫法;

+7:查找7天前的文件,這裏用數字表明天數;

"*.log":但願查找的數據類型,"*.jpg"表示查找擴展名爲jpg的全部文件,"*"表示查找全部文件,這個能夠靈活運用,觸類旁通;

-exec:固定寫法;

rm -rf:強制刪除文件,包括目錄;

{} \; :固定寫法,一對大括號+空格+\+;

清空方法:

find /opt/soft/log/ -mtime +7 -name "*.log" -type f -print -exec truncate -s 0 {} \;    ->將符合這樣一個條件的文件查到出來並賦予它0M的大小。

-type f -print: 將符合的文件打印出來

truncate -s 0 aa.txt:意思是將aa.txt的大小變成0M,即把aa.txt的內容清空了。能夠百度truncate的用法。

4、編寫shell腳本

#!/bin/bash

status(){
  date 
  find /var/log/ -mtime +3 -name 'gc*.log' -type f -print -exec rm -rf {} \;
  echo "刪除zeus job webIndex gc log成功"
  date 
  find /var/log/ -mtime +3 -name 'info.log.*' -type f -print -exec truncate -s 0 {} \;
  echo "清空zeus job webIndex info log成功"
  date 
  find /var/log/ -mtime +3 -name 'error.log.*' -type f -print -exec truncate -s 0 {} \;
  echo "清空zeus job webIndex error log成功"
  date 
  find /var/log/ -mtime +3 -name 'wrapper.log.*' -type f -print -exec truncate -s 0 {} \;
  echo "清空zeus job webIndex wrapper log成功"
  return
}

case "$1" in 
    status)
        status;;*)
            echo "清除失敗"
esac 

添加執行權限:chmod 755 clearlog.sh 

5、定時任務

  經常使用命令:

   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文件 ,定時任務的寫法:*(分)  *(時) *(日) *(月) *(周) 

大功告成!

6、附贈

附錄一下全部job時間格式:

基本格式 : 
*  *  *  *  *  command 
分 時 日 月 周 命令 
第1列表示分鐘1~59 每分鐘用*或者 */1表示 
第2列表示小時1~23(0表示0點) 
第3列表示日期1~31 
第4列表示月份1~12 
第5列標識號星期0~6(0表示星期天) 
第6列要運行的命令 
crontab文件的一些例子: 
30 21 * * * /usr/local/etc/rc.d/lighttpd restart 
上面的例子表示每晚的21:30重啓apache。 
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart 
上面的例子表示每個月一、十、22日的4 : 45重啓apache。 
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart 
上面的例子表示每週6、週日的1 : 10重啓apache。 
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart 
上面的例子表示在天天18 : 00至23 : 00之間每隔30分鐘重啓apache。 
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart 
上面的例子表示每星期六的11 : 00 pm重啓apache。 
0 */1 * * * /usr/local/etc/rc.d/lighttpd restart 
每一小時重啓apache 
0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart 
晚上11點到早上7點之間,每隔一小時重啓apache 
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart 
每個月的4號與每週一到週三的11點重啓apache 
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart 
一月一號的4點重啓apache 
名稱 : crontab 
使用權限 : 全部使用者 
使用方式 : 
crontab file [-u user]-用指定的文件替代目前的crontab。 
crontab-[-u user]-用標準輸入替代目前的crontab. 
crontab-1[user]-列出用戶目前的crontab. 
crontab-e[user]-編輯用戶目前的crontab. 
crontab-d[user]-刪除用戶目前的crontab. 
crontab-c dir- 指定crontab的目錄。 
crontab文件的格式:M H D m d cmd. 
M: 分鐘(0-59)。 
H:小時(0-23)。 
D:天(1-31)。 
m: 月(1-12)。 
d: 一星期內的天(0~6,0爲星期天)。 
cmd要運行的程序,程序被送入sh執行,這個shell只有USER,HOME,SHELL這三個環境變量 
說明 : 
crontab 是用來讓使用者在固定時間或固定間隔執行程序之用,換句話說,也就是相似使用者的時程表。-u user 是指設定指定 
user 的時程表,這個前提是你必需要有其權限(好比說是 root)纔可以指定他人的時程表。若是不使用 -u user 的話,就是表示設 
定本身的時程表。 
參數 : 
crontab -e : 執行文字編輯器來設定時程表,內定的文字編輯器是 VI,若是你想用別的文字編輯器,則請先設定 VISUAL 環境變數 
來指定使用那個文字編輯器(好比說 setenv VISUAL joe) 
crontab -r : 刪除目前的時程表 
crontab -l : 列出目前的時程表 
crontab file [-u user]-用指定的文件替代目前的crontab。 
時程表的格式以下 : 
f1 f2 f3 f4 f5 program 
其中 f1 是表示分鐘,f2 表示小時,f3 表示一個月份中的第幾日,f4 表示月份,f5 表示一個星期中的第幾天。program 表示要執 
行的程序。 
當 f1 爲 * 時表示每分鐘都要執行 program,f2 爲 * 時表示每小時都要執行程序,其餘類推 
當 f1 爲 a-b 時表示從第 a 分鐘到第 b 分鐘這段時間內要執行,f2 爲 a-b 時表示從第 a 到第 b 小時都要執行,其餘類推 
當 f1 爲 */n 時表示每 n 分鐘個時間間隔執行一次,f2 爲 */n 表示每 n 小時個時間間隔執行一次,其餘類推 
當 f1 爲 a, b, c,... 時表示第 a, b, c,... 分鐘要執行,f2 爲 a, b, c,... 時表示第 a, b, c...個小時要執行,其餘類推 
使用者也能夠將全部的設定先存放在檔案 file 中,用 crontab file 的方式來設定時程表。 
例子 : 
#天天早上7點執行一次 /bin/ls : 
0 7 * * * /bin/ls 
在 12 月內, 天天的早上 6 點到 12 點中,每隔3個小時執行一次 /usr/bin/backup : 
0 6-12/3 * 12 * /usr/bin/backup 
週一到週五天天下午 5:00 寄一封信給 alex@domain.name : 
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata 每個月天天的午夜 0 點 20 分, 2 點 20 分, 4 點 20 分....執行 echo "haha" 20 0-23/2 * * * echo "haha" 注意 : 當程序在你所指定的時間執行後,系統會寄一封信給你,顯示該程序執行的內容,如果你不但願收到這樣的信,請在每一行空一格之 後加上 > /dev/null 2>&1 便可 例子2 : #天天早上6點10分 10 6 * * * date #每兩個小時 0 */2 * * * date #晚上11點到早上8點之間每兩個小時,早上8點 0 23-7/2,8 * * * date #每月的4號和每一個禮拜的禮拜一到禮拜三的早上11點 0 11 4 * mon-wed date #1月份日早上4點 0 4 1 jan * date 範例 $crontab -l 列出用戶目前的crontab.

相關文章
相關標籤/搜索