shell指令碼 日誌切割

2021-10-01 20:53:28 字數 2725 閱讀 9711

#!/bin/bash

# 介紹:logcut.sh 簡單的日誌切割指令碼,前3天的切割方便隨時看,前4-10天的進行壓縮,超出的刪除

## 注意:會將其他帶時間的日誌壓縮後刪除

# 功能:日誌切割 《日誌格式: ***xx.當前年-月-日.log> 《壓縮格式: ***xx.當前年-月-日.tar.gz>

## 適用:centos6+

# 語言:中文

#流程#主體:先檢查是否是log檔案,是則檢查是否是切割後檔案,不是則去切割,是則檢查時間是否3天內的,3天外則壓縮

#切割:檢查是否有這個檔案,有則將日誌重定向到切割後的檔案,清空日誌。沒有則複製乙份,清空日誌

#壓縮:檢查是否有這個檔案,有則刪除。壓縮檔案,並刪除原始檔

#檢查壓縮:檢查是否有tar.gz結尾檔案,有則匹配是否帶時間,帶時間則看是否超過10天,超過刪除。不帶時間則跳過

#[使用設定]

#日誌檔案所在目錄,將切割這個資料夾下所有日誌

log_dir=/ops/logs

#以切割形式儲存的檔案天數

date_cut=3

#以壓縮形式儲存的天數

date_yasuo=7

#[自動獲取]

#當前年月日

date_now=

`date +%f`

#當前年月

date_nian=

`date +%y-`

#前3天陣列

date_cut_zu=($(

for i in `seq 1 $`;

dodate -d -$days "+%f"

;done))

#前10天陣列

date_time=

`expr $date_cut + $date_yasuo`

date_yasuo_zu=($(

for i in `seq 1 $`;

dodate -d -$days "+%f"

;done))

#對日誌名進行格式處理,$1填寫要處理的檔案

format_name()`

local b=

`echo $

` echo$b}

#對傳入的日誌檔案進行切割處理,$1填寫要切割檔案

cut_log(

).$.log"

#先匹配是否已經有這個檔案ls|

grep

"^$$"

&> /dev/null

if[[

$? -eq 0 ]];

then

cat$1

>>

$cut_file

>

$1else

cp -p $i

$cut_file

>

$1fi

}#對當前檔案進行壓縮,$1填寫要被壓縮的檔案

yasuo_log(

).log.tar.gz"

#先匹配是否已經有這個檔案ls|

grep

"^$$"

&> /dev/null

if[[

$? -eq 0 ]];

then

#有則刪除,刪除的都是3天中的,刪除後從新打包

rm -rf $yasuo_file

fitar -cf $yasuo_file

$1rm -rf $i

}#整理日誌檔案

cut_main()&

> /dev/null

if[[

$? -eq 0 ]];

then

local a=

`format_name $i`

local b=

`echo $

` #當前日誌年月日

#看是否在陣列中,不在則壓縮

echo$|

grep -w $b

&> /dev/null

#echo $date_nowif[

[$? -ne 0 ]];

then[[

"$b"

!="$date_now"]]

&& yasuo_log $i

fielse

cut_log $i

fidone

}#整理壓縮的日誌檔案

yasuo_main()&

> /dev/null

if[[

$? -eq 0 ]];

then

local a=

`echo $

` local b=

`echo $

` #當前日誌年月日

#看是否在陣列中,不在則刪除

echo$|

grep -w $b

&> /dev/null

if[[

$? -ne 0 ]];

then[[

"$b"

!="$date_now"]]

&&rm -rf $i

fielse

#不是當月的,其他型別壓縮包,跳過

continue

fidone

}#開始if[

[! -d $log_dir]]

;then

echo

"$log_dir not found"

exit 1

ficd

$log_dir

cut_main

yasuo_main

shell 指令碼日期操作

最近使用kettle任務時,在指令碼開發時,使用到獲取指定日期前後幾天的日期,例如 獲得變數yesterday 2017 03 05,前兩天的日期字串。在平常使用的時候,僅使用過獲取當前時間前後幾天的日期,可以使用 stime date d 1 days ago f date d 1 days ag...

shell指令碼 日常巡檢

以下內容僅為提供思路 對於運維來說,每天對所管理的伺服器進行一次以上的巡檢是最基本的工作,當然,天天free df的敲鍵盤很麻煩,這時候最好寫乙個日常巡檢的指令碼,辛苦一天,輕鬆一年 巡檢指令碼有兩種思路,一種是當你想親眼看一看系統狀況的時候,每台伺服器都親自執行一遍這個指令碼 另一種是將所有功能封...

學習shell指令碼日記

linux,shell 2015 02 07 1.計畫任務 corntab e 編寫計畫任務 corntab l檢視計畫任務 corntab r清除所有的計畫任務 如果要清除某一項計畫任務,就是進入計畫任務的編輯頁面,逐個刪除就可以了 2.任務計畫編寫與執行 內容 格式 分 時 日 月 年 命令 r...