1. linux定時刪除N天前的文件(文件夾)
磁碟只有22T容量,為了避免爆盤,業務需要定時清除數據,根據網上的資料總結了一下設置方法:
可以使用find命令
另外的方法大仿凳同小異悔慧:
可以吧這個命令寫到腳本里,
cleandata.sh
find /tmp -mtime +30 -type f -name "*" -exec rm -rf {} ;
配置可執行
chmod u+x ./cleandata.sh
配置到crontab
crontab -e
0 0 * * * /home/username/cleandata.sh > /dev/null 2>&1
每天零點自動執行
其中:
第一個 號表示時間中的 分鍾 取值范圍:0-59
第二個 號表示時間中的 小時 取值范圍:0-23
第三個 號表示一個月中的第幾天,取值范圍:1-31
第四個 號表示一年中的第備前旅幾個月,取值范圍:1-12
第五個*號表示一個星期中的第幾天,以星期天開始依次的取值為0~7,0、7都表示星期天
2. Linux 定時刪除文件夾或文件
給個思路:
編寫自動刪除文件的腳本枝拿,關鍵部分是使用find命令查找到符合條件的文件野攜並將其刪頌搭伏除;
加入crontab,每天23:00運行腳本
PS: 如果刪除的文件沒有備份或者對應路徑下有其他重要文件,則不建議這樣做,畢竟誰都不敢保證自動運行的東西不會抽風……自己考慮下要不要用吧
3. Linux shell:定時刪除指定時間之前的文件
要求刪除一個月之前的備份文件,免得把硬碟給整爆了
location 是設置查找的目錄
--mtime +30 是設置時間為30天前
-type f 這周查找的類型為文件
然後加入crontab定時襪氏來刪除:
設定為每個月1號晚上4點10分執行腳本.當然你也可以根據你自己團衡的需求去整.
相同的刪除塌好做方法:
4. 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時間定義你可以去網路查查。希望對您有用!
5. 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執行,且輸出重定向到黑洞目錄。
6. 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的內容清空了
7. linux 下如何編寫定時刪除某目錄下文件的腳本
自己編寫crontab設定計劃任務就是了,
那個服務就是做這些定時的,自動化的工作用的。要寫什麼腳本的,一個命令搞定。
給你個手冊頁自己看吧。
補充回答:
運行這個命令:
crontab
-e
此命令將打開一個文本編輯器以添加新任務。
*
20
*
*
*
rm
-rf
/root/febhost/dat/*
/root/febhost/log/*
用對應的文本編輯器命令保存退出(vi編輯器是按esc後打:wq)
如果你對這種方式不熟悉,也可以直接改/etc/crontab,我看到你是要刪除root文件夾內的目錄,假設你有root許可權(因為/etc/crontab所有者是root,並且只有以root身灶茄碰份執行刪除命令才能刪除root
home內的文件),用以下命令打開此文件:
vi
/etc/crontab
將游標移動至最後一行,按o鍵新開一行輸入以下內容:
*
20
*
*
*
root
rm
-rf
/root/febhost/dat/*
/root/febhost/log/*
給你解釋下此行的含義吧,前五個以4個空格分隔開的值依次表示:分、時、日、月、周隱談,如果取所有值就是打*號,如果你想周期性的運行一個任務,crontab也接受范圍指定,比如說一天中的早8點到晚6點每隔一小時(就是每兩小時,將會在8,10,12,14,16,18執行)執行你這個刪除命令這樣寫:
*
8-18/2
*
*
*
root
rm
-rf
/root/febhost/dat/*
/root/febhost/log/*
第一個欄位是分鍾,取值范圍:0-59
第二個欄位是小時。取值范圍:0-23
第三個欄位是一個月中的第幾天,取值范圍:1-31
第四個欄位是一年中的第幾個月,取值范圍:1-12
最後一個欄位是一個星期中的第幾天,以星期天開始依次的取值為0~7,0、7都表示星期天。
下一個欄位是納拍執行該命令的用戶身份,這里是root用戶,最後一個欄位就是定時運行的命令。
8. 用shell腳本自動定時清除/釋放內存
Linux系統buff/cache 中緩存數據佔用內存過高,定時清理buff/cache ,釋放系統內存
root許可權創山並建腳本文件:
cat clean_cache.sh
設置定時任猛唯物務,每隔2小時運行一次:
crontab -e
0 */2 * * * sh /usr/枝液local/bin/clean_cache.sh
9. 如何定時清理Linux系統中的Nginx日誌
nginx日誌文件需要手動分割,創建腳本文件clear_log.sh
文件路徑/usr/local/nginx/clear_log.sh
vi clear_log.sh。輸入如下內容
#!/bin/bash
cp /usr/local/nginx/logs/error.log /usr/local/nginx/error-$(date -d 「yesterday」 +「%Y%m%d」).log
#先復制原來的錯誤日誌文件,請根據自己實際的日誌路徑填寫
cat /dev/null 》 /usr/local/nginx/logs/error.log
#清空錯誤日誌文件
cp/usr/local/nginx/logs/access.log /var/log/nginx/access/access-$(date -d 「yesterday」 +「拆遲%Y%m%d」).log
#先復制原來的正常訪問日誌
cat /dev/null 》 /usr/local/nginx/logs/access.log
#清空原來的正常訪問日誌
創建dellog.sh文件,路徑/usr/local/nginx
咐殲vi dellog.sh
#!/bin/sh
find /usr/nginx/logs/error -mtime +7 -type f -name /*.log | xargs rm -f
find /usr/nginx/logs/access -mtime +7 -type f -name /*.log | xargs rm -f
#定期刪除七天前的日誌文件
啟動linux下的計劃任務,將剛才創建好的兩個shell腳本加入此計劃
crontab -e,輸入如下內容
0 0 * * * /usr/nginx/clear_log.sh
#每天0點執行/usr/nginx/clear_log.sh
0 0 * * * /usr/nginx/dellog.sh
#每天0點執行 /usr/nginx/dellog.sh
保存後退出,輸入命令crontab root就會看到/var/spool/cron/文件旅簡李夾下看到相應的副本文件root。至此完成nginx日誌按天拆分與定期清除。
邏輯詳解:比如現在是3月18日0點0分,系統會自動執行clear_log.sh與dellog.sh兩個shell腳本。clear_log.sh會把3月17日的日誌文件分別生成為access_20140317.log與error_20140318.log,然後把原來的access.log與error.log分別清空。dellog.sh則會自動判斷該文件的創建時間,如果是十五天前的就會自動清除
上面就是Linux清理Nginx日誌的方法介紹了,因為Nginx日誌沒有自動清理的功能,一般採用切割日誌的方法進行處理。
10. linux定時任務刪除除當天外的文件夾
清理linux文件步驟如下:
1、首先新建腳本new_namesh清理穗睜文件命令如下:find/var/mqm/errors/-name.py-execrm-rf{};
2、其次給腳本加上許可權:chmod+xnew_name.sh;
3、最後打開定時肆粗任務:crontab-e,加入100/path/new_namesh這是猜雹歲每天0點10分執行此腳本。