Debian服务器JS日志备份策略
logrotate是Debian系统原生工具,可自动处理JS日志的轮转、压缩、删除及进程通知,无需额外安装依赖。
sudo apt-get install logrotate。/etc/logrotate.d/目录下创建专用配置文件(如nodejs-logs),内容示例如下:/path/to/nodejs/logs/*.log {
daily # 每日轮转
rotate 7 # 保留最近7天日志
compress # 压缩旧日志(gzip格式)
delaycompress # 延迟压缩(避免当天日志被立即压缩)
missingok # 日志文件不存在时不报错
notifempty # 日志为空时不轮转
create 640 root adm # 创建新日志文件并设置权限
sharedscripts # 所有日志处理完成后统一执行脚本
postrotate # 轮转后执行的命令(重启Node.js进程以释放文件句柄)
/usr/bin/kill -USR1 $(cat /path/to/nodejs/logs/node.pid) 2>/dev/null || true
endscript
}
sudo logrotate -d /etc/logrotate.d/nodejs-logs测试语法正确性;若需强制立即执行,用sudo logrotate -f /etc/logrotate.d/nodejs-logs。通过Shell脚本实现JS日志的打包备份,并结合cron定时任务自动化执行。
/usr/local/bin/js_log_backup.sh,内容如下:#!/bin/bash
LOG_DIR="/path/to/nodejs/logs" # JS日志源目录
BACKUP_DIR="/path/to/backup/logs" # 备份存储目录
DATE=$(date +%Y%m%d_%H%M%S) # 当前时间戳(用于文件名)
# 创建备份目录(若不存在)
mkdir -p "$BACKUP_DIR"
# 打包日志文件(保留完整路径结构)
tar -czvf "$BACKUP_DIR/js_logs_$DATE.tar.gz" -C "$LOG_DIR" .
# 删除超过30天的旧备份(避免磁盘空间耗尽)
find "$BACKUP_DIR" -type f -name "js_logs_*.tar.gz" -mtime +30 -exec rm {} \;
chmod +x /usr/local/bin/js_log_backup.sh。crontab -e添加任务,例如每天凌晨1点执行:0 1 * * * /usr/local/bin/js_log_backup.sh >> /var/log/js_log_backup.log 2>&1
该配置会将备份过程的输出(包括错误信息)重定向到/var/log/js_log_backup.log,便于后续排查问题。若需实现异地备份(防本地磁盘故障),可通过rsync将JS日志同步至远程服务器。
sudo apt-get install rsync。/usr/local/bin/rsync_js_logs.sh,内容如下:#!/bin/bash
LOCAL_DIR="/path/to/nodejs/logs" # 本地JS日志目录
REMOTE_USER="remote_user" # 远程服务器用户名
REMOTE_HOST="remote.example.com" # 远程服务器IP/域名
REMOTE_DIR="/path/to/remote/logs" # 远程备份目录
# 使用rsync同步(保留文件属性,删除目标端多余文件)
rsync -avz --delete "$LOCAL_DIR/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR"
chmod +x /usr/local/bin/rsync_js_logs.sh。0 2 * * * /usr/local/bin/rsync_js_logs.sh >> /var/log/rsync_js_logs.log 2>&1
该配置会同步本地JS日志到远程服务器,并删除远程端不存在于本地的文件,确保两边数据一致。对于多服务器环境,可将JS日志发送至集中式日志服务器(如ELK Stack、Graylog),实现统一存储、搜索与分析。