服务器维护,服务器代维,安全设置,漏洞扫描,入侵检测服务

运维之家

 找回密码
 注册
搜索
查看: 5775|回复: 0

Linux下Apache日志按日期分割并自动备份

[复制链接]
dirtysea 发表于 2010-6-24 15:27:30 | 显示全部楼层 |阅读模式

目的:实现服务器A的Apache访问日志和错误日志每天按日期分割为一个文件保存,然后由另一台备份服务器B每天凌晨自动复制服务器A的日志文件并打包压缩备份。

  • 首先要设置服务器A的apache,实现日志文件自动按日期分割,以下为CentOS为例,httpd.conf文件配置如下:

<virtualhost *:80>
  ServerName www.example.com
  Serveralias example.com
  ServerAdmin webmaster@example.com
  DocumentRoot /var/www/example.com/
  <directory"/">
    Options FollowSymLinks
    AllowOverride all
  </directory>
   <directory"/var/www/example.com/">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
    Order allow,deny
    allow from all
  </directory>
  ErrorLog "|rotatelogs /var/log/httpd/example_error_log/%Y%m%d 86400 480"
  CustomLog "|rotatelogs /var/log/httpd/example_access_log/%Y%m%d 86400 480" common
</virtualhost>

注意要创建日志目录,否者启动httpd会报错,
如:
1 Previous file handle doesn't exists /var/log/httpd/example_access_log/20070330

#mkdir /var/log/httpd/example_error_log
#mkdir /var/log/httpd/example_access_log


以上配置利用了apache的rotatelogs功能实现了站点日志文件每天如20081221的形式保存到指定目录下,rotatelogs的用法可以参考这里

  • 服务器A设置好之后,就可以去备份服务器B写备份脚本了,这里假设服务器A的IP为:192.168.0.3,脚本如下:




# apache log backup
#!/bin/bash

# 获取昨天的日期
logfilename=`date -d yesterday +%Y%m%d`
# 设置日志备份文件路径
backupfilepath=/var/www/logs/

# 备份错误日志文件
echo "get example error log:"
cd ${backupfilepath}
# 获到服务器A昨天的日志文件
scp root@192.168.0.3:/var/log/httpd/example_error_log/${logfilename} ./example/error/
cd ${backupfilepath}example/error/
# 打包压缩日志文件
tar zcvf ${logfilename}.tar.gz ${logfilename}
rm -rf ${logfilename}

# 备份访问日志文件
echo "get example access log:"
cd ${backupfilepath}
scp root@192.168.0.3:/var/log/httpd/example_access_log/${logfilename} ./example/access/
cd ${backupfilepath}example/access/
tar zcvf ${logfilename}.tar.gz ${logfilename}
rm -rf ${logfilename}
echo "done."










在准备运行以上脚本以前,要先**两台服务器之间用ssh-keygen命令生成的密钥设置了信任关系,可以参考我之前写的这篇日志:Linux下用SCP无需输入密码获取文件

然后将该脚本命名为apachelog_backup.sh保存到/var/cron/目录下。


  • **两台服务器的备份目录都已建立好,当然事先可以自己测试一下脚本,比如到服务器A的备份目录建立一个用前一天日期命名的日志文件,内容随便,然后再到备份服务器B去先执行一下脚本,查看是否备份成功。
    最后用 crontab -e 命令在linux的定时任务中加入自动执行任务,让脚本在每天凌晨12点之后自动执行,如下:

30 00 * * * sh /var/cron/apachelog_backup.sh


这里我设置了每天零点30分执行脚本。

  • 大功告成
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|运维之家

GMT+8, 2024-4-26 14:09 , Processed in 0.191077 second(s), 14 queries .

Powered by Dirtysea

© 2008-2020 Dirtysea.com.

快速回复 返回顶部 返回列表