# 脚本 **Repository Path**: wei-jianmin/script ## Basic Information - **Project Name**: 脚本 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-28 - **Last Updated**: 2026-07-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 日志持久化方案 ## 概述 本方案实现两台服务器间的日志持久化: - **业务服务器**:自动压缩一天前的日志,上传到日志服务器 - **日志服务器**:保留180天日志,自动删除过期日志 ## 文件说明 | 文件 | 用途 | 部署位置 | |------|------|----------| | `log_upload.sh` | 业务服务器日志压缩上传脚本 | 业务服务器 | | `log_cleanup.sh` | 日志服务器过期日志清理脚本 | 日志服务器 | ## 前置准备 ### 1. SSH密钥认证(必须) 在业务服务器上执行,配置免密码登录日志服务器: ```bash # 生成SSH密钥(如果尚未生成) ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa # 将公钥复制到日志服务器 ssh-copy-id -p 22 loguser@log-server.example.com ``` ### 2. 安装依赖 业务服务器和日志服务器都需要安装: ```bash # CentOS/RHEL yum install -y rsync gzip # Debian/Ubuntu apt-get install -y rsync gzip ``` ## 业务服务器配置 ### 1. 上传脚本 将 `log_upload.sh` 复制到业务服务器: ```bash scp log_upload.sh root@business-server:/usr/local/bin/ chmod +x /usr/local/bin/log_upload.sh ``` ### 2. 修改配置参数 编辑 `/usr/local/bin/log_upload.sh`,修改以下参数: ```bash LOG_DIR="/var/log/business" # 业务日志目录 COMPRESS_DIR="/var/log/business/compressed" # 压缩文件临时目录 LOG_SERVER="log-server.example.com" # 日志服务器地址 LOG_SERVER_USER="loguser" # 日志服务器登录用户 LOG_SERVER_DIR="/data/logs/business" # 日志服务器存储目录 SSH_PORT="22" # SSH端口 ``` ### 3. 添加crontab任务 ```bash crontab -e ``` 添加以下内容(每天凌晨1点执行): ```bash 0 1 * * * /usr/local/bin/log_upload.sh ``` ## 日志服务器配置 ### 1. 清理脚本 将 `log_cleanup.sh` 复制到日志服务器: ```bash scp log_cleanup.sh root@log-server:/usr/local/bin/ chmod +x /usr/local/bin/log_cleanup.sh ``` ### 2. 修改配置参数 编辑 `/usr/local/bin/log_cleanup.sh`,修改以下参数: ```bash LOG_DIR="/data/logs/business" # 日志存储目录 RETENTION_DAYS=180 # 日志保留天数 ``` ### 3. 创建日志存储目录 ```bash mkdir -p /data/logs/business chown loguser:loguser /data/logs/business ``` ### 4. 添加crontab任务 ```bash crontab -e ``` 添加以下内容(每天凌晨2点执行): ```bash 0 2 * * * /usr/local/bin/log_cleanup.sh ``` ## 脚本工作流程 ### 业务服务器 `log_upload.sh` 1. 检查脚本是否正在运行(锁机制) 2. 查找一天前的 `.log` 文件(排除当天和昨天的日志) 3. 使用 gzip 压缩日志文件 4. 使用 rsync 上传压缩文件到日志服务器 5. 上传成功后清理本地压缩文件 ### 日志服务器 `log_cleanup.sh` 1. 检查脚本是否正在运行(锁机制) 2. 查找180天前的 `.gz` 压缩文件 3. 删除过期文件并记录日志 ## 日志查看 ```bash # 业务服务器查看上传日志 tail -f /var/log/log_upload.log # 日志服务器查看清理日志 tail -f /var/log/log_cleanup.log ``` ## 注意事项 1. **SSH密钥认证必须配置**:crontab无法处理交互式密码输入 2. **上传失败时保留本地文件**:确保数据不会丢失 3. **使用rsync而非scp**:支持断点续传,更可靠 4. **锁机制防止并发执行**:避免脚本重复运行导致问题 5. **建议先手动测试**:在配置crontab前手动运行脚本验证功能 ## 手动测试 ```bash # 业务服务器手动运行 bash /usr/local/bin/log_upload.sh # 日志服务器手动运行 bash /usr/local/bin/log_cleanup.sh ```