改进我的备份bash脚本

时间:2011-01-26 12:20:44

标签: linux bash backup

您好 我将我的日志文件保存在/ opt / project / logs /下,我希望每天通过压缩将这些文件复制到/ opt / bkp。

为此,我写了这个并且运作良好:

#!/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扩展名结束?

3 个答案:

答案 0 :(得分: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/而不用担心它再次。 :)

答案 1 :(得分:0)

您是否考虑过使用'logrotate'?它将为您压缩和修剪日志,可选择启动需要踢的关闭日志文件,制作茶等等。这可能是您的linux框用于日志管理的。

man logrotate

了解更多。你的方式,当你得到你想要的功能时,你会写logrotate:)

答案 2 :(得分: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
}