添加liunxFtp上传到其他主机的脚本
添加liunxFtp上传到其他主机的脚本

添加liunxFtp上传到其他主机的脚本

来源:本站原创
更新:1天前
  

一.在 Linux 本机安装 lftp

    # CentOS / RHEL

    yum install lftp -y

    

    # Debian / Ubuntu

    apt update && apt install lftp -y

二.创建配置文件 /etc/backup_ftp.conf:

    vi /etc/backup_ftp.conf

    

    1.确认要写入的内容

        FTP_HOST=你的Windows_IP
  
   FTP_USER=backup_user
  
   FTP_PASS=你的密码
  
   FTP_PORT=21
  
   DING_WEBHOOK=https://oapi.dingtalk.com/robot/send?access_token=你的token
  
   DING_KEYWORD=宝塔面板
  
   DING_TITLE=备份异常

        

        使用 vi 的操作流程:

            进入插入模式

            按一下键盘字母 i(左下角出现 -- INSERT -- 表示可以输入/粘贴)。

            

            粘贴内容

            直接把上面 4 行内容复制(Ctrl+C),然后到终端里右键 → 粘贴,或者 Shift+Insert 粘贴。

            终端里会显示刚才的四行内容。

            

            退出插入模式

            按一下键盘 Esc 键(左下角 -- INSERT -- 消失)。

            

            保存并退出

            输入英文冒号 :,再输入 wq,然后回车。

            完整命令是 :wq → 回车。

            文件保存成功后会回到命令提示符。

            

            如果想放弃编辑,按 Esc 后输入 :q! 回车。

            

    2.设置文件权限(重要)

        chmod 600 /etc/backup_ftp.conf

        

    3.检查文件是否写入成功

        cat /etc/backup_ftp.conf

三.备份脚本:

    #!/bin/bash
  
  
  
   source /etc/backup_ftp.conf
  
  
  
   SRC1="/www/backup/database/mysql/crontab_backup/www_itingshu_net"
  
   DST1="/mysql/www_itingshu_net"
  
  
  
   SRC2="/www/backup/site/api.itingshu.iiisss.top"
  
   DST2="/site/www_itingshu_net"
  
  
  
   LOGFILE="/var/log/backup_to_win.log"
  
   LOCKFILE="/var/run/backup_to_win.lock"
  
  
  
   # ---- 每月清空一次日志 ----
  
   THIS_MONTH=$(date +%Y%m)
  
   LAST_CLEAN_FILE="/var/run/backup_to_win.clean_date"
  
  
  
   if [ -f "$LAST_CLEAN_FILE" ]; then
  
   LAST_MONTH=$(cat "$LAST_CLEAN_FILE")
  
   else
  
   LAST_MONTH="none"
  
   fi
  
  
  
   if [ "$THIS_MONTH" != "$LAST_MONTH" ]; then
  
   : > "$LOGFILE"
  
   echo "$THIS_MONTH" > "$LAST_CLEAN_FILE"
  
   fi
  
  
  
   exec 200>"$LOCKFILE"
  
   flock -n 200 || {
  
   echo "$(date '+%F %T') - 备份任务已在运行,跳过。" | tee -a "$LOGFILE"
  
   exit 1
  
   }
  
  
  
   # 钉钉通知函数
  
   ding_talk() {
  
   local message="$1"
  
   local title="${2:-${DING_TITLE}}"
  
   local full_title="${DING_KEYWORD}${title}"
  
   curl -s -X POST "$DING_WEBHOOK" \
  
   -H "Content-Type: application/json" \
  
   -d '{"msgtype":"actionCard","actionCard":{"title":"'"${full_title}"'","text":"'"${message}"'"}}' >/dev/null 2>&1
  
   }
  
  
  
   echo "$(date '+%F %T') - 开始 FTP 每日备份(仅上传最新 .sql.gz / .tar.gz)..." | tee -a "$LOGFILE"
  
  
  
   # 上传每个本地目录中最新的一个符合条件的文件
  
   upload_latest() {
  
   local local_dir="$1"
  
   local remote_dir="$2"
  
  
  
   echo "[$(date '+%F %T')] 正在处理: $local_dir" | tee -a "$LOGFILE"
  
  
  
   # 找出最新的 .sql.gz 或 .tar.gz 文件(按修改时间倒序,取第一个)
  
   local latest_file
  
   latest_file=$(find "$local_dir" -maxdepth 1 -type f \( -name "*.sql.gz" -o -name "*.tar.gz" \) -printf "%T@ %p\n" 2>/dev/null | sort -rn | head -1 | awk '{print $2}')
  
  
  
   if [ -z "$latest_file" ]; then
  
   echo "[$(date '+%F %T')] 未找到 .sql.gz 或 .tar.gz 文件,跳过: $local_dir" | tee -a "$LOGFILE"
  
   return 0 # 不视作失败
  
   fi
  
  
  
   local fname
  
   fname=$(basename "$latest_file")
  
  
  
   echo "[$(date '+%F %T')] 准备上传: $fname -> $remote_dir/" | tee -a "$LOGFILE"
  
  
  
   lftp -u "$FTP_USER","$FTP_PASS" -p "$FTP_PORT" "$FTP_HOST" <&1 | tee -a "$LOGFILE"
  
   set ftp:ssl-allow no
  
   mkdir -p "$remote_dir"
  
   put "$latest_file" -o "$remote_dir/$fname"
  
   quit
  
   EOF
  
  
  
   if [ ${PIPESTATUS[0]} -eq 0 ]; then
  
   echo "[$(date '+%F %T')] 上传成功: $fname" | tee -a "$LOGFILE"
  
   else
  
   echo "[$(date '+%F %T')] 上传失败: $fname" | tee -a "$LOGFILE"
  
   return 1
  
   fi
  
   }
  
  
  
   FAIL=0
  
   upload_latest "$SRC1" "$DST1" || FAIL=1
  
   upload_latest "$SRC2" "$DST2" || FAIL=1
  
  
  
   if [ $FAIL -eq 0 ]; then
  
   echo "$(date '+%F %T') - 所有备份完成" | tee -a "$LOGFILE"
  
   else
  
   echo "$(date '+%F %T') - 部分备份失败,请检查日志" | tee -a "$LOGFILE"
  
   ding_talk "备份任务执行异常,请登录服务器检查 /var/log/backup_to_win.log"
  
   fi
  
  
  
   exit $FAIL

    

    

四.宝塔计划任务设置:

    类型:Shell 脚本

    

    周期:每天(比如凌晨 3 点执行一次)

    在计划任务里选择 “N 天” → 1 天,时间自定义。

    

    脚本内容:

    bash /www/backup_to_win.sh
添加liunxFtp上传到其他主机的脚本最近章节
从头阅读添加liunxFtp上传到其他主机的脚本请点击下面
热门推荐
添加liunxFtp上传到其他主机的脚本来源更新