新聞中心
linux日志清理腳本清理不掉
linux是一個很能自動產(chǎn)生文件的系統(tǒng),日志、郵件、備份等。雖然現(xiàn)在硬盤廉價,我們可以有很多硬盤空間供這些文件浪費,讓系統(tǒng)定時清理一些不需要的文件很有一種爽快的事情。不用你去每天惦記著是否需要清理日志,不用每天收到硬盤空間不足的報警短信,想好好休息的話,讓我們把這個事情交給機器定時去執(zhí)行吧。
創(chuàng)新互聯(lián)公司是網(wǎng)站建設(shè)專家,致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營銷,專業(yè)領(lǐng)域包括網(wǎng)站設(shè)計制作、網(wǎng)站建設(shè)、電商網(wǎng)站制作開發(fā)、小程序開發(fā)、微信營銷、系統(tǒng)平臺開發(fā),與其他網(wǎng)站設(shè)計及系統(tǒng)開發(fā)公司不同,我們的整合解決方案結(jié)合了恒基網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗和互聯(lián)網(wǎng)整合營銷的理念,并將策略和執(zhí)行緊密結(jié)合,且不斷評估并優(yōu)化我們的方案,為客戶提供全方位的互聯(lián)網(wǎng)品牌整合方案!
二、 分析日志
查看日志路徑和日志命名規(guī)則:
要清理這個目錄下面如此命名規(guī)則的日志。
三、方法
這時我想的肯定是希望能寫一個腳本把這些日志清除掉,但不是刪除掉。那么現(xiàn)在需要實現(xiàn)3步:
? ?1.找到所有項目的log的位置
? ?2.清除或者刪除log內(nèi)容
? ?3.定時執(zhí)行腳本
刪除和清空日志命令:
find?對應(yīng)目錄?-mtime?+天數(shù)?-name?"文件名"?-exec?rm?-rf?{}?\;
實例命令:
find?/opt/soft/log/?-mtime?+7 -name?"*.log"?-exec?rm?-rf?{}?\;
說明:
將/opt/soft/log/目錄下所有7天前帶".log"的文件刪除。具體參數(shù)說明如下:
find:linux的查找命令,用戶查找指定條件的文件;
/opt/soft/log/:想要進行清理的任意目錄;
-mtime:標(biāo)準(zhǔn)語句寫法;
+7:查找7天前的文件,這里用數(shù)字代表天數(shù);
"*.log":希望查找的數(shù)據(jù)類型,"*.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的內(nèi)容清空了
linux刪除日志文件的命令
例: vi /var/log/messages :set nu 查看文件中的你要刪除的時間段在幾行之間 如果是100-200行,則將光標(biāo)放在第100行,按100dd即可刪除。 還有其他方法。看你的具體需求。
linux定時清理nohup命令下產(chǎn)生的日志
nohup命令 將程序以忽略掛起信號的方式運行起來,被運行的程序的輸出信息將不會顯示到終端。一般用于將程序的輸出、報錯信息重定向到一個指定路徑的指定文件。
語法 :nohup [command] [args] [] ? ?
nohup命令 最后要帶個作為結(jié)束
例:nohup python XXX.py abc/def/XXX.log 21
args: 0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ;
21是將標(biāo)準(zhǔn)錯誤(2)重定向到標(biāo)準(zhǔn)輸出(1),標(biāo)準(zhǔn)輸出(1)再被重定向輸入到文件,即XXX.log中。
nohup命令的缺點:日志文件文件越來越大,占內(nèi)存且查看麻煩。因為這個日志文件和程序是共生死的,因為只要程序運行起來,就一直對log文件進行讀寫,直接刪除XXX.log會導(dǎo)致程序也被結(jié)束了。
目前想到的一些相關(guān)方法如下,并未完全解決問題。
參考: linux下nohup日志輸出過大問題解決方案
split命令:
參數(shù):-b:值為每一輸出檔案的大小,單位為 byte。
? ? ?? -C:每一輸出檔中,單行的最大 byte 數(shù)。
? ? ?? -d:使用數(shù)字作為后綴。默認這個數(shù)字后綴是兩位的,例如00,01,11. -a: 指定位數(shù),例如 -a 4表示后綴是四位的。
? ? ?? -l:值為每一輸出檔的列數(shù)大小。
? ? ?? PREFIX:代表前導(dǎo)符,可作為切割文件的前導(dǎo)文件。
例如:
可以用split命令把很大的日志文件分成多個小文件,分割完成后 原文件不變 。不會影響nohup運行的程序。
缺點:split文件分割依賴手動,當(dāng)程序出故障或調(diào)試時,將日志分割以便查看最新的日志信息。沒法定時做到定時自動清理。
首先介紹find命令的參數(shù)
參考: linux find命令詳解
在這里主要用到的是這幾個參數(shù):
-atime n 查找系統(tǒng)中最后n*24小時訪問的文件
-ctime n? 查找系統(tǒng)中最后n*24小時被改變文件狀態(tài)的文件
-mtime n? 查找系統(tǒng)中最后n*24小時被改變文件數(shù)據(jù)的文件
+n: n天前; -n: n天之內(nèi)
find命令還可以和下一條命令連用(xargs或exec)
或
注:{}表示find到的東西;{}和 \;之間要有一個空格
我感覺exec不是很好用,怪怪的
cat dev/null
在 Linux 中, null 設(shè)備基本上被用來丟棄某個進程不再需要的輸出流,或者作為某個輸入流的空白文件,這些通??梢岳弥囟ㄏ驒C制來達到。
所以 /dev/null 設(shè)備文件是一個特殊的文件,它將清空送到它這里來的所有輸入,而它的輸出則可被視為一個空文件。另外,你可以通過使用 cat 命令顯示 /dev/null 的內(nèi)容然后重定向輸出到某個文件,以此來達到清空該文件的目的。通過使用cat /dev/null,文件大小為0字節(jié)。
用cat刪除文件:
但是我發(fā)現(xiàn)對于nohup的程序的日志,這樣是無效的。因為nohup的程序持續(xù)不斷地在讀寫日志文件,此時無法重定向,我試了幾次,日志文件都壓根沒動。
crontab用于設(shè)置定時任務(wù)
參考:? linux crontab定時執(zhí)行shell腳本
crontab命令被用來提交和管理用戶的需要周期性執(zhí)行的任務(wù),與windows下的計劃任務(wù)類似,當(dāng)安裝完成操作系統(tǒng)后,默認會安裝此服務(wù)工具,并且會自動啟動crond進程,crond進程每分鐘會定期檢查是否有要執(zhí)行的任務(wù),如果有要執(zhí)行的任務(wù),則自動執(zhí)行該任務(wù)。
語法
crontab(選項)(參數(shù))
選項
-e:編輯該用戶的計時器設(shè)置;
-l:列出該用戶的計時器設(shè)置;
-r:刪除該用戶的計時器設(shè)置;
-u用戶名稱:指定要設(shè)定計時器的用戶名稱。
參數(shù)
crontab文件:指定包含待執(zhí)行任務(wù)的crontab文件。
首先crontab -e,就會進入vi編輯界面。然后直接把新的命令輸進去就行了。
minute hour day month week command /XXX/XXX.log 順序:分 時 日 月 周
minute: 表示分鐘,可以是從0到59之間的任何整數(shù)。
hour:表示小時,可以是從0到23之間的任何整數(shù)。
day:表示日期,可以是從1到31之間的任何整數(shù)。
month:表示月份,可以是從1到12之間的任何整數(shù)。
week:表示星期幾,可以是從0到7之間的任何整數(shù),這里的0或7代表星期日。
/n表示每個n的單位執(zhí)行一次
command:要執(zhí)行的命令,可以是系統(tǒng)命令,也可以是自己編寫的腳本文件。
意為每周的1:00執(zhí)行,且輸出重定向到黑洞目錄。
名稱欄目:linux清空日志命令行 清空linux所有日志文件內(nèi)容
文章鏈接:http://www.dlmjj.cn/article/dohhgps.html