2011-01-26 91 views
0

你好 我把我的日誌文件保存在/ opt/project/logs /下,我想每天通過壓縮將它們複製到/ opt/bkp。改進我的備份bash腳本

爲此,我寫了這一點,效果很好:

#!/bin/bash 

getdate(){ 
    date --date="$1 days ago" "+%Y_%m_%d" 
} 

rm -rf "/opt/bkp/logs/myapp_log_"$(getdate 365).gz ; 
/bin/cat /opt/project/logs/myapp.log | gzip > /opt/bkp/logs/myapp_log_`date +%Y_%m_%d`.gz ; 
echo "" > /opt/project/logs/myapp.log ; 

但是它不是功能性或一般情況下,我都會有多個應用程序保存文件與他們的名字,即app1.log app2.log相同/opt/project/logs/文件夾下。我怎樣才能使這個作爲一個「功能」,腳本在/opt/project/logs/目錄下讀取每個文件,並且每個文件的備份以.log擴展名結尾?

回答

2

您可以使用發行版附帶的logrotate(8)工具。 :)的幫助頁看起來接近你需要一個例子:

/var/log/news/* { 
     monthly 
     rotate 2 
     olddir /var/log/news/old 
     missingok 
     postrotate 
      kill -HUP `cat /var/run/inn.pid` 
     endscript 
     nocompress 
    } 

嘛,不是monthly位,或重新啓動inn :)但我希望你的想法,你可以一個新的配置文件,方便地添加到/etc/logrotate.d/,不用擔心。 :)

0

你有沒有考慮使用'logrotate'?它會爲你壓縮和修剪日誌,可選地踢出需要踢腳的進程來關閉日誌文件,製作茶等等。這可能是你的Linux機器用於日誌管理的東西。

man logrotate

瞭解更多。你要的樣子,你會的時候寫的日誌輪播你得到你想要的:)功能

0

我建議使用logrotate過,但無法抗拒寫這劇本:)

proc_logs() { 
    for log in /opt/project/logs/*.log; do 
    cat "$log" | gzip > ${log%/*}/$(basename "$log" ".log")_`date +%Y_%m_%d`.gz; 
    touch "$log"; 
    done 
}