备份Nginx的log目录下acess.log文件,并上传至ftp服务器

cron定时

0 * * * * . /etc/profile;/bin/sh /usr/local/nginx/logs/backup_accesslog_ftp.sh >> /usr/local/nginx/logs/backup_accesslog_ftp_sh.log 2>&1

sh脚本文件


#!/bin/sh

# 备份日志文件目录
LOG_DIR="/usr/local/nginx/logs/"
# 日志文件
LOG_FILE="access.log"
# FTP 服务器配置
FTP_SERVER="xx.xx.xx.xx"
FTP_USER="ftpUser"
FTP_PASS="ftpPwd"

# 获取当前日期和时间
DATE=$(date +'%Y%m%d')
# 获取当前时间的上一个小时
LAST_UPLOAD_FILE_SUFFIX=$(date -d '1 hour ago' +'%Y%m%d_%H')
# 上传文件后缀名称
UPLOAD_FILE_SUFFIX=$(date +'%Y%m%d_%H')
# FTP 上传文件远程目录
REMOTE_DIR="/ftp/backup/nginx/$DATE"

# 备份并压缩日志文件
cp "$LOG_DIR/$LOG_FILE" "$LOG_DIR/access_$UPLOAD_FILE_SUFFIX.log"
gzip -c "$LOG_DIR/access_$UPLOAD_FILE_SUFFIX.log" > "$LOG_DIR/access_$UPLOAD_FILE_SUFFIX.log.gz"

# 上传文件
PUTFILE=access_$UPLOAD_FILE_SUFFIX.log.gz

# 检查并创建远程目录
ftp -inv $FTP_SERVER <<EOF
user $FTP_USER $FTP_PASS
cd $REMOTE_DIR
if [ $? -ne 0 ]; then
mkdir $REMOTE_DIR
fi
bye
EOF

# 登录FTP服务器并执行命令
ftp -v -n $FTP_SERVER<<EOF
user $FTP_USER $FTP_PASS
binary
cd $REMOTE_DIR
lcd $LOG_DIR
prompt
put $PUTFILE
bye
EOF
echo "commit to ftp successfully"

# 清空原始日志文件
: > "$LOG_DIR/$LOG_FILE"
# 删除压缩文件
rm -rf $LOG_DIR/access_$UPLOAD_FILE_SUFFIX.log.gz
# 删除上一个小时的日志文件(始终保留最近一个小时的日志文件可查)
rm -rf $LOG_DIR/access_$LAST_UPLOAD_FILE_SUFFIX.log

ftp基础命令

删除目录

rmdir xx

删除文件

delete xx