代码改变世界

Shell脚本自动下载FTP文件上传到S3

2023-11-16 11:22  假面Wilson  阅读(88)  评论(0编辑  收藏  举报

1. shell脚本下载

#!/bin/bash

#用户名
USER=xxx
#密码
PASSWORD=xxx
#下载文件临时目录
SRCTDIR=/approveform/uat/tempin
#S3获取文件目录
SRCDIR=/approveform/uat/in
#S3获取文件日志
SRCLOG="/approveform/uat/log/`date +%Y%m%d`.log"
#FTP目录(待下载文件目录)
DESDIR=/LIGHTNING/OUT/OAF
#FTP归档目录
MESDIR=/LIGHTNING/OUT/OAF/ARCHIVE
#IP
IP=xxxx
#端口
PORT=22

echo "`date +%F%T`下载FTP文件开始" >> ${SRCLOG} 2>&1
#下载到临时目录
lftp -u ${USER},${PASSWORD} sftp://${IP}:${PORT}<<EOF

#mkdir ${MESDIR}

cd ${DESDIR}
lcd ${SRCTDIR}
#hash 
#prompt off
mget -c *
close
bye
EOF

echo "`date +%F%T`下载FTP文件结束" >> ${SRCLOG} 2>&1

echo "`date +%F%T`移动文件开始" >> ${SRCLOG} 2>&1
#遍历临时目录,
#cd ${SRCTDIR}
for file in `ls ${SRCTDIR}`
do 
lftp -u ${USER},${PASSWORD} sftp://${IP}:${PORT}<<EOF
#移动FTP文件到归档目录
mv ${DESDIR}/${file} ${MESDIR}/${file}
bye
EOF
#移动文件到S3获取目录
mv ${SRCTDIR}/${file} ${SRCDIR}  
done
echo "`date +%F%T`移动文件结束" >> ${SRCLOG} 2>&1

 

2. 上传S3

#!/bin/bash
#待上传的文件目录
SRCDIR=/approveform/uat/in
#已上传存档的文件目录-年
DESDIRY="/approveform/uat/archive/`date +%Y`"
#已上传存档的文件目录-年/月
DESDIRYM="/approveform/uat/archive/`date +%Y`/`date +%Y%m`"
#已上传存档的文件目录-年/月/日时
DESDIRYMDH="/approveform/uat/archive/`date +%Y`/`date +%Y%m`/`date +%Y%m%d%H`"
#上传的S3目录
S3DIR=s3://xxxx/ApproveForm/IN/
#S3获取文件日志
SRCLOG="/approveform/uat/log/`date +%Y%m%d`.log"

echo "`date +%F%T`上传文件到S3开始" >> ${SRCLOG} 2>&1
if [ -d ${DESDIRY} ];then
        echo "年文件夹存在" >> ${SRCLOG}
    else
        mkdir ${DESDIRY}
fi

if [ -d ${DESDIRYM} ];then
        echo "年月文件夹存在" >> ${SRCLOG}
    else
        mkdir ${DESDIRYM}
fi

if [ -d ${DESDIRYMDH} ];then
        echo "年月日时文件夹存在" >> ${SRCLOG}
    else
        mkdir ${DESDIRYMDH}
fi
cd ${SRCDIR}
for file in `ls ${SRCDIR}`
do 
   /usr/local/bin/aws s3 cp ${file} ${S3DIR}
   mv ${file} ${DESDIRYMDH}
done 

echo "`date +%F%T`上传文件到S3结束" >> ${SRCLOG} 2>&1

 

3. 设置Crontab

  


#启动服务
/sbin/service crond start
#关闭服务
/sbin/service crond stop
#重启服务
/sbin/service crond restart
#重新载入配置  
/sbin/service crond reload
#检查状态
systemctl status crond
# 对Crontab进行授权
chmod 600 /var/spool/cron/{username}
# 查看日志
tail -f /var/log/cron
#aws command not found
which aws # 获取aws路径,加入/etc/crontab 的 PATH后重启cron服务,如果不行就直接用路径替换脚本的aws
# /bin/sh: awss3.sh Permission denied
chmod +x awss3.sh


#打开定时器编辑器
crontab -e
#增加以下文本
#每小时执行下载文件
0 */1 * * * /approveform/uat/sftp.sh >> /approveform/uat/log/cronlog.log 2>&1 & echo $(date +"\%Y\%m\%d_\%H:\%M")"执行下载文件Job" >> /approveform/uat/log/cronlog.log 2>&1


#每30分执行上传文件到S3
*/30 * * * * /approveform/uat/awss3.sh & echo $(date +"\%Y\%m\%d_\%H:\%M")"执行上传S3文件Job" >> /approveform/uat/log/cronlog.log 2>&1


#每分钟测试定时器有没有执行
*/1 * * * * echo $(date +"\%Y\%m\%d_\%H:\%M")"定时器每分钟执行Job" >> /approveform/uat/log/cronlog.log 2>&1