shell脚本进行远程ftp文件自动化传输

1.ftp传输常用命令说明:

ls 列出远程机的当前目录

cd 在远程机上改变工作目录

lcd 在本地机上改变工作目录

ascii 设置文件传输方式为ASCII模式

binary 设置文件传输方式为二进制模式

close 终止当前的ftp会话

hash 每次传输完数据缓冲区中的数据后就显示一个#号

get(mget) 从远程机传送指定文件到本地机

put(mput) 从本地机传送指定文件到远程机

#!/bin/bash
cur_date=`date +'%Y%m%d'`
static_dir="/dir/$cur_date"
local_dir="/dir/"
count=`ls $local_dir | wc -w`
echo $count
i=1
for a in $( ls $local_dir );do  #循环遍历指定目录文件,这一步只要是判断有没有需要传输的文件,若没有需要传输的文件,则不进行传输
  echo $i
  echo "循环开始"
  if [ "${a##*.}"x = "sql"x ];then  #指定传输后缀为sql的文件
    echo "传输文件-->$a"
    break;            #存在sql文件便退出循环
  elif [ $i -eq $count ]; then
    echo "sqlFileNotExist"
    exit;        #若传输文件不存在,则退出脚本
  else
    let i++
    continue;
  fi
done
ftp -n -v <<EOF   
open ipaddr port  #输入地址ipaddr以及端口号port
user ftpuser ftppwd  #输入用户名ftpuser以及密码ftppwd
ls  #列出远程目录
hash  
cd $static_dir   #进入远程传输文件所在目录
lcd $local_dir   #进入本地传输文件所在目录
prompt
mput *.sql  #传输所有后缀为sql的文件
bye   #退出ftp
EOF

2.在进行连接远程ftp服务时,总出现中途失去连接的情况,目前原因还没有排查出来,针对这种情况,我在另外的脚本里对执行上一脚本时进行了日志记录,若日志里存在“226 Transfer complete”则证明传输成功,若没有,则证明传输中失去了连接,则尝试重新连接传输。上限设定了50次。

#!/bin/bash
rm -rf upload_odd.log  #运行前清空记录日志内容
local_dir="/dir/sh" #本地传输文件所在目录
nohup sh /home/uploadftp.sh >upload_oss.log 2>&1 &  #运行传输脚本并进行日志记录
wait;  #等待脚本运行结束,再执行以下内容
if [ `grep -c  "sqlFileNotExist" upload_oss.log` -eq '1'  ];then  #判断是否有需要传输的文件,若没有,则退出脚本
        echo "没有需要传输生成的sql文件"
        exit;
fi
i=0  #定义循环次数
while [  `grep -c  "226 Transfer complete" upload_oss.log` -eq '0' ]
do    #判断传输是否成功
  let i++
  echo "循环执行$i次"
  nohup sh /home/uploadftp.sh >upload_oss.log 2>&1 &  #若没有成功,则继续执行传输脚本文件
  wait;  #等待传输文件脚本执行完毕
  if [ $i -eq 50 ];then  #为防止循环次数太多,限定循环上线50次
     echo "循环执行超出限定次数"
     echo "upload fail"  #超出上限,则提示传输失败
     exit
  fi
done
echo "success!"
for a in $( ls $local_dir );do   #将传输成功的sql文件进行重命名
  if [ "${a##*.}"x = "sql"x ];then
    echo $a
    ntime=`date +'%Y-%m-%d %H:%M:%S'`
    nseconds=$(date --date="$ntime" +%s);
    mv $local_dir$a "$local_dir$a.$nseconds.ok"
  fi
done
echo "commit to ftp successfully"

3.输入crontab -e开启crontab进行定时设置

30 09 * * * sh /dir/uploadftp_run.sh  #设置每天九点半定时跑脚本

 

crontab时间格式说明


        minute(分)可以设置0-59分

        hour(小时)可以设置0-23小时

        day of month(日期)可以设置1-31号

        month(月份):可以设置1-12月

        day of week(星期):可以设置0-7星期几,其中0和7都代表星期天,或者也可以使用名称来表示星期天到星期一,例如sun表示星期天,mon表示星期一等等
 

crontab范例


    每五分钟执行  */5 * * * *

    每小时执行     0 * * * *

    每天执行        0 0 * * *

    每周执行       0 0 * * 0

    每月执行        0 0 1 * *

    每年执行       0 0 1 1 *

关于shell运算符的简单介绍:

大于 -gt (greater than) 
小于 -lt (less than) 
大于或等于 -ge (greater than or equal) 
小于或等于 -le (less than or equal) 
不相等 -ne (not equal)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值