2006-11-19

巧用logrotate实现多份备份

有这样的需求:定期备份CVS仓库中的数据,最好能保留多份备份。开始的时候我是用python编写了一段脚本实现了个功能,将执行备份任务的这个脚本程序用crontab每天调用一次,这个脚本很长但是还不完善。后来看一些关于滚动日志方面的东西,到一个可以利用logrotate机制进行滚动备份的方法。

logrote是用来滚动系统日志的,因为很多软件的日志都是只增不减的,服务器长时间的日志将会浪费大量的磁盘空间(我的apache的日志达到过几G量级),但是系统如果出问题的话还要从日志中分析原因,所以系统还必须存有一段时间的日志。logrote的功能是自动将原有的日志文件 aaa.log命名为aaa.log.n(n=1,2,...),实现了日志的滚动,设置好相应的参数便可以实现只保存一段时间的日志(比如4个月)。

应用logrotate的这种机制也可以用来滚动备份其他的东西,假设想要备份的源为/src/sim,备份到/usr/sim_bak/sim_cvs_reposity.tar,具体如下:

在/etc/logrotate.d目录下加一个这样的文件,文件内容如下:

/usr/sim_bak/sim_cvs_reposity.tar {
   daily
   postrotate
      /bin/tar -cf /usr/sim_bak/sim_cvs_reposity.tar /src/sim
   endscript
   nocompress
}


daily的意思是每天执行一次;postrotate... endscript之间的部分是当滚动完后要执行的操作;nocompress表示无须压缩,如果想要压缩可以写成compress。

系统缺省设置保存4份备份,这样便实现了每天备份cvs reposity,并且一直保有4份备份。

TIPS: UNIX系统管理真是一门艺术

没有评论: