1. linux 系統 shell腳本定時 清空系統日誌文件
其實沒有必要寫復shell腳本,簡單一制句話放在系統定時任務里就行了。
比如你的日誌文件名叫a.log。路徑為/tmp/a.log;
那麼你可以寫個定時任務,這樣做:crontab -e 進入定時任務器,然後把下面這段寫到裡面
00 02 * * * echo " " >/tmp/a.log
然後保存退出就可以了。這段內容意思是,每天凌晨2點自動清空a.log內容。你也可以自己定義多久清一次。比如想10分鍾清一次,就這么寫*/10 * * * * echo " " >/tmp/a.log。具體的crontab時間定義你可以去網路查查。希望對您有用!
2. Oracle Windows/Linux定期清理歸檔日誌
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; //刪除七天前的歸檔日誌
* 注意修改文件路徑
下圖是根據上面教程創建的兩個文件
(1)、先查看歸檔日誌路徑,確認歸檔日誌文件信息情況。
更改過歸檔日誌路徑的情況查看,執行 archive log list;
輸入內容,注意修改 /data/oracle/del_archivelog/ 路徑
注意賦予文件的可執行許可權,執行 chmod 777 del_archivelog.sh
寫入內容,每天凌晨4點執行腳本 del_archivelog.sh ,並將執行結果輸出到 task.log
查看crontab所有定時任務,執行 crontab -l
到此整個Linux下的配置已結束,注意定期觀察任務的運行情況。
3. 在Linux下如何清除系統日誌
使用過Windows的人都知道,在使用windows系統的.過程中系統會變得越來越慢。而對於Windows下飽受詬病的各種垃圾文件都需要自己想辦法刪除,不然系統將會變得越來越大,越來越遲鈍!windows怎麼清理垃圾相信大家都知道的,那麼linux下怎麼清理系統垃圾呢?
Linux的文件系統比Windows的要優秀,不會產生碎片,對於長時間運行的伺服器來說尤為重要,而且Linux系統本身也不會像Windows一樣產生大量的垃圾文件。不知道這個說法有沒有可信度!至少我們可以確定的是linux系統的文件系統是比較優秀的!
錯誤
rm -f logfile
原因
應用已經打開文件句柄,直接刪除會造成:
1.應用無法正確釋放日誌文件和寫入
2.顯示磁碟空間未釋放
正確
cat /dev/null > logfile
把一下代碼保存為.sh後綴腳本來運行即可清除Linux系統日誌
#!/bin/sh
cat /dev/null > /var/log/syslog
cat /dev/null > /var/adm/sylog
cat /dev/null > /var/log/wtmp
cat /dev/null > /var/log/maillog
cat /dev/null > /var/log/messages
cat /dev/null > /var/log/openwebmail.log
cat /dev/null > /var/log/maillog
cat /dev/null > /var/log/secure
cat /dev/null > /var/log/httpd/error_log
cat /dev/null > /var/log/httpd/ssl_error_log
cat /dev/null > /var/log/httpd/ssl_request_log
cat /dev/null > /var/log/httpd/ssl_access_log
另外清理linux系統垃圾還有以下命令
sudo apt-get autoclean 清理舊版本的軟體緩存
sudo apt-get clean 清理所有軟體緩存
sudo apt-get autoremove 刪除系統不再使用的孤立軟體
4. linux定時清理nohup命令下產生的日誌
nohup命令 將程序以忽略掛起信號的方式運行起來,被運行的程序的輸出信息將不會顯示到終端。一般用於將程序的輸出、報錯信息重定向到一個指定路徑的指定文件。
語法 :nohup [command] [args] [&]
nohup命令 最後要帶個&作為結束
例:nohup python XXX.py > abc/def/XXX.log 2>&1 &
args: 0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ;
2>&1是將標准錯誤(2)重定向到標准輸出(&1),標准輸出(&1)再被重定向輸入到文件,即XXX.log中。
nohup命令的缺點:日誌文件文件越來越大,占內存且查看麻煩。因啟棗局為這個日誌文件和程序是共生死的,因為只要程序運行起來,就一直對log文件進行讀寫,直接刪除XXX.log會導致程序也被結束了。
目前想到的一些相關方法如下,並未完全解決問題。
參考: linux下nohup日誌輸出過大問題解決方案
split命令:
參數:-b:值為每一輸出檔案的大小,單位為 byte。
-C:每一輸出檔中,單行的最大 byte 數。
-d:使用數字作為後綴。默認這個數字後綴是兩位的,例如00,01,11. -a: 指定位數,例如 -a 4表示後綴是四位的。
-l:值為每一輸出檔的列數大小。
PREFIX:代表前導符,可作為切割文件的前導文件。
例如:
可以用split命令把很大的日誌文件分成多個小文件,分割完成後 原文件不變 。不會影響nohup運行的程序。
缺點:split文件分割依賴手動,當程序出故障或調試時,將日誌分割以便查看最新的日誌信息。沒法定時做到定時自動清理。
首先介紹find命令的參數
參考: linux find命令詳解
在這里主要用到的是這幾個參數:
-atime n 查找系統中最後n*24小時訪問的文件
-ctime n 查找系統中最後n*24小時被改變文件狀態的文件
-mtime n 查找系統中最後n*24小時被改變文件數據的文件
+n: n天前; -n: n天之內
find命令還可岩辯以和下一條命令連用(xargs或exec)
或
註:{}表示find到的東西;{}和 \;之間要有一個空格
我感覺exec不是很好用,怪怪的
cat dev/null
在 Linux 中, null 設備基本上被用來丟棄某個進程不再需要的輸出流,或者作為某個輸入流的空白文件,這些通常可以利用重定向機制來達到。
所以 /dev/null 設備文件是一個特殊的文件,它將清空送到它這里來的所有輸入,而它的輸出則可被視為一個空文件。另外,你可以通過使用 cat 命令顯示 /dev/null 的內容然後重定向輸出到某個文件,以此來達到清空該文件的目的。通過使用cat /dev/null,文件大小為0位元組。
用cat刪除文件:
但是我發現對於nohup的程序的日誌,這樣是無效的。因為nohup的程序持續不斷地在讀寫日誌文件,此時無法重定向,我試了幾次,日誌文件都壓根沒動。
crontab用悄讓於設置定時任務
參考: linux crontab定時執行shell腳本
crontab命令被用來提交和管理用戶的需要周期性執行的任務,與windows下的計劃任務類似,當安裝完成操作系統後,默認會安裝此服務工具,並且會自動啟動crond進程,crond進程每分鍾會定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。
語法
crontab(選項)(參數)
選項
-e:編輯該用戶的計時器設置;
-l:列出該用戶的計時器設置;
-r:刪除該用戶的計時器設置;
-u<用戶名稱>:指定要設定計時器的用戶名稱。
參數
crontab文件:指定包含待執行任務的crontab文件。
首先crontab -e,就會進入vi編輯界面。然後直接把新的命令輸進去就行了。
minute hour day month week command /XXX/XXX.log 順序:分 時 日 月 周
minute: 表示分鍾,可以是從0到59之間的任何整數。
hour:表示小時,可以是從0到23之間的任何整數。
day:表示日期,可以是從1到31之間的任何整數。
month:表示月份,可以是從1到12之間的任何整數。
week:表示星期幾,可以是從0到7之間的任何整數,這里的0或7代表星期日。
/n表示每個n的單位執行一次
command:要執行的命令,可以是系統命令,也可以是自己編寫的腳本文件。
意為每周的1:00執行,且輸出重定向到黑洞目錄。
5. Linux系統 /var/log/journal/ 垃圾日誌清理
查看某個目錄的文件大小並排序 (單位為MB)
清空 /var/log/journal 文件拿世的方法
1、用echo命令,將空字元串內容重定向到指定文件中
echo "" > system.journal
2、journalctl 命令自動維護文件大咐啟小
1)只保留近一周的日誌
journalctl --vacuum-time=1w
2)只保留500MB的日誌
journalctl --vacuum-size=500M
3)直接刪除 /var/log/journal/ 目錄下的日誌文件
rm -rf /var/log/journal/
問題與分析解決
執行 journalctl時報錯:Error was encountered while opening journal files: Input/output error
問題分析:日誌文件損壞
解決方法:刪除之前的日誌,並重消簡肢啟 journalctl 服務
然後,再執行 journalctl 限制日誌的命令:
6. linux刪除日誌文件的命令
例: vi /var/log/messages :set nu 查看文件中的你要刪除的時間段在幾行之間 如果是100-200行,則將游標放在第100行,按100dd即可刪除。 還有其他方法。看你的具體需求。
7. linux自動清理日誌的方法分享
1.做自動部署系統時精簡的一個腳本,主要功能是清理所有目錄的日誌
2.根據給定日誌目錄,刪除時間 結合crontab進行清理日誌,清理完成後,後在/var/log/deltelog/ 生成按照月的清理日誌
3.擴展,因為腳本採用mtime(最後修改時間)進行刪除,所以可以適用於刪除過期備份等,不受文件名稱的限制
shell小竅門
find –type f –print 時會根據換行或者空格來輸出查找的文件,在不同的sh下有不同的`反應,如果不做處理結合xargs 進行刪除 更改操作,會有影響
所以需要增加 –print0 用 null來 作為邊界符號,才敢結婚 xargs –o 來格式化輸入
使用find 的時候 遵循最小結果集原則,find解析式從左到右,所有確保你在最左邊的過濾符號能夠過濾最大數據
你可以根據你的需要增加到crontab中
shell腳本
復制代碼 代碼如下:
#!/bin/sh
###########################
# log blog.plicatedcode.com
# in_day_num: like 1 2 is 2day ago logs
# in_log_path like tomcat log home
###########################
in_log_path=${1}
in_day_num=${2}
tmp__log=/var/log/log/"`date +%Y%m`.log"
Log()
{
inner_num=${1}
#find log
echo "[`date`] >> start logs---" >> $tmp__log
find ${in_log_path} -type f -mtime ${inner_num} -print0 | xargs -0 rm -rf
echo "[`date`] >> end logs---" >> $tmp__log
}
init()
{
mkdir -p /var/log/log/
}
main()
{
init
if [ -z ${in_log_path} ];then
echo "[`date`] >> error log_path not init---" >> $tmp__log
return
fi
inner_day_num=+7
if [[ -n ${in_day_num} ]] && [[ ${in_day_num} -ge 1 ]] ; then
${inner_day_num}=${in_day_num}
fi
Log ${inner_day_num}
}
main
8. 定期清理linux伺服器日誌文件的幾個思路
定期清理linux伺服器日誌文件的幾個思路
1,在跑批程序中,用java代碼調用shell腳本;
2,在跑批程序中,用純java代碼實現,也就是使用java的文件操作類File;
3,純shell腳本方式,使用linux伺服器的調度程序調用shell腳本;
結合最近的項目,這里提供一個示例。首先,我們是在跑批項目中實現的定期清理日誌功能,
因為我們有跑批項目,使用的是Control M進行調度,所以這種方式還是很方便的。
第一步:寫shell腳本
find /home/logs/ -mtime +30 -name "*.log" -exec rm -rf {} ;
腳本其實很簡單,一行代碼就夠了,把這個代碼放在一個shell文件中,然後放在伺服器的
指定目錄下,等待java程序調用。
第二步:寫java代碼,調用shell腳本,示例代碼僅提供思路,請大家自己調試
// 設置可執行許可權
String commond = "chmod 777 clearLogFileOnTime.sh";
Process proc = Runtime.getRuntime().exec(commond);
proc.waitFor();
// 執行shell腳本
commond = "bash clearLogFileOnTime.sh";
proc = Runtime.getRuntime().exec(commond);
第三步:配置Control M,進行作業調度
關於Control M的配置不再贅述,主要就是設置跑批程序的執行時間,以及一些其他參數。
9. linux日誌清理腳本清理不掉
linux是一個很能自動產生文件的系統,日誌、郵件、備份等。雖然現在硬碟廉價,我們可以有很多硬碟空間供這些文件浪費,讓系統定時清理一些不需要的文件很有一種爽快的事情。不用你去每天惦記著是否需要清理日誌,不用每天收到硬碟空間不足的報警簡訊,想好好休息的話,讓我們把這個事情交給機器定時去執行吧。
二、 分析日誌
查看日誌路徑和日誌命名規則:
要清理這個目錄下面如此命名態返咐規則的日誌。
三、方法
這時我想的肯定是希望能寫一個腳本把這些日誌清除掉,但不是刪除掉。那麼現在需要實現3步:
1.找到所有項目的log的位置
2.清除或者刪除log內容
3.定時執行腳本
刪除和清空日誌命令:
find 對應目錄 -mtime +天數 -name "文件名" -exec rm -rf {} \;
實例命令:
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的內容清空了