linux是一個很能自動產生文件的系統,日誌、郵件、備份等。雖然如今硬盤廉價,咱們能夠有不少硬盤空間供這些文件浪費,讓系統定時清理一些不須要的文件頗有一種爽快的事情。不用你去天天惦記着是否須要清理日誌,不用天天收到硬盤空間不足的報警短信,想好好休息的話,讓咱們把這個事情交給機器定時去執行吧。linux
查看日誌路徑和日誌命名規則:web
要清理這個目錄下面如此命名規則的日誌。shell
這時我想的確定是但願能寫一個腳本把這些日誌清除掉,但不是刪除掉。那麼如今須要實現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的用法。
#!/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
經常使用命令:
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文件 ,定時任務的寫法:*(分) *(時) *(日) *(月) *(周)
大功告成!
附錄一下全部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.