#!/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...