Linux下洗掉過期日志檔案
簡單記錄一下作業中遇到的需求問題,寫點博客記錄一下自己的成長歷程,
目前的專案中有需求,需要去定期處理掉服務器上的過期日志檔案還有服務器本地存盤的過期圖片,
理想狀態下是7天前的日志和圖片都被刪掉,目前這篇文章記錄洗掉本地Linux服務器上的日志和圖片,
我想到4種實作方式
1 - Java定時任務直接洗掉本地指定檔案,用過濾器過濾出7天的檔案,直接用洗掉檔案,這個方法最直接,但是過濾的邏輯和程序就復雜了,
2 - Linux撰寫洗掉7天前的日志和圖片,這個僅需兩行代碼即可,但是定時任務要添加到Linux系統中去,需要root權限
3 - Linux撰寫洗掉腳本,Java創建定時任務去執行這個腳本,過期時間定時時間都可以隨意變更比較靈活,而且維護起來復雜度低,
4 - Java中把Linux腳本撰寫成字串格式,用Java定時任務去執行這個字串生成的腳本,最簡潔,最方便
4種方法我都嘗試了,最侄訓是選擇了第二種,又快還簡單,
當然我也把第3種方法寫進去了.希望對看到文章的你有所幫助,
1. Linux腳本撰寫
創建shell腳本 touch +檔案絕對路徑
touch /mnt/data/opt/data/cow_spray_control_java/48b02d1854a9/shell/delete.sh
分配可執行權限 chmod +x +檔案絕對路徑
chmod +x /mnt/data/opt/data/cow_spray_control_java/48b02d1854a9/shell/delete.sh
進入目錄并編輯腳本檔案
cd /mnt/data/opt/data/cow_spray_control_java/48b02d1854a9/shell
vim delete.sh
Linux自動洗掉n天前日志及實體命令
find /opt/log/ -mtime +7 -name "*.log" -exec rm -rf {} \;
find :Linux的查找命令,用戶查找指定條件的檔案;
/opt/log/ : 想要清理的日志存放目錄;
-mtime +7 : 查找7天前的檔案,個數字代表天數;
“*.log” :希望查找的檔案型別,“ .jpg” 表示茶桌所有圖片,舉一反三 “ *+ 檔案后綴”代表這類檔案
-exec :固定寫法;
rm -rf:強制洗掉檔案,新手謹慎使用,容易刪光跑路;
{} ; :固定寫法 一對大括號{}+空格+反斜杠\ + 分號;
加入crontab(如果不用Java執行,可以直接Linux定時任務執行)
crontab -e
59 23 * * * /bin/sh /opt/log/logs_delete.sh
這個表示為,每天23點59分執行這個腳本,
2. Java定時任務撰寫
shellPath為shell腳本檔案的絕對路徑
@Scheduled(fixedDelay = 24 * 60 * 60 * 1000)
public void run() {
// 把要執行的腳本檔案路徑寫成字串格式傳入exec執行腳本,注意linux下檔案目錄/使用反斜杠
String[] scriptPath = new String[] {"/bin/sh", shellPath};
try {
LOGGER.info("定時清理任務開始");
// 執行腳本
Runtime.getRuntime().exec(scriptPath);
} catch (IOException e) {
LOGGER.error("定時清除腳本執行例外", e);
}
LOGGER.info("定時清理任務結束");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/263015.html
標籤:其他
