Shell开发脚本 通过SFTP 定时 上传文件

2024-08-23 16:32

本文主要是介绍Shell开发脚本 通过SFTP 定时 上传文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【背景】

与三方公司对接,有数据传输需求,数据传到对方的服务器,对方提供的传输方式是SFTP

【思路】

数据来自于ORACLE,项目先提供在服务器上使用sqluldr2来操作【数据导出】工作,之前的博客有提到大批量数据【导入】工具sqluldr,注意不要弄混了,然后把数据存到指定的文件下,接着通过crontab 任务定时调用传输工具脚本就行了,之前未接触过SFTP,这次遇到一些坑,网上查了许多文章没有我需要的,简单记录一下:

1.FTP传输示例

先放之前FTP上传下载文件的做法,连接到指定IP和端口 把用户名和密码写在后面 进入指定的路径,完成操作即可,提醒一下,确保执行脚本的电脑有FTP

ftp -ivn <<EOFopen 172.X.X.X 21user ftp_user ftp_passWordbinarylcd /opt/yj/ChannelDataFolder/  mput *.txtquit
EOF

2.SFTP传输示例

spawn sftp -oPort=端口 sftp_name@sftp_ip
expect  {"password:" { send "sftp_password\r" }
}expect "sftp> "
send "cd sftp_path\r"
expect "sftp> "
send "put data.txt\r"
expect "sftp> "
send "bye"

个人觉得SFTP与FTP在 SHELL脚本最大的区别就在于,ftp可以一步到位,sftp多了一个交互的过程,实现就需要考虑如何跟sftp服务器完成交互,最开始做的时候看着一些代码段直接拿来用,后面这也不行那也不行,原来自己没有安装expect 这个工具,一切操作要在这个工具支持下完成,tcl和expect都要安装。

下载安装示例

下载地址如下:
https://download.csdn.net/download/u012972294/84232811下载两个包,分别解压  注:假设两个包存放地址为,/usr/local/src1。先安装tcl进入tcl解压目录,然后进入unix目录#./configure#make#make install2.后安装expect  注:如果目录和上述不一致,需要更换到你解压的目录,千万注意路径问题!进入expect解压目录#./configure --with-tclinclude=/usr/local/src/tcl8.4.19/generic/ --with-tclconfig=/usr/local/lib/#make#make install完成,测试#expectexpect1.1> expect1.1>

【可能遇到的问题点】

0. 没有编译环境!!!!

我在新的服务器环境遇到了!!   这个就自行百度了, 

1.expect安装完成且测试通过,但是运行报错提示:expect spawn not found

网上很多方法,我试过都不行,我的处理方式执行的时候这么写:

expect -f ./XXX.sh

2.执行脚本的时候各种提示,无法识别定义的变量、shell命令等,具体原因暂时没有弄明白,只好折中处理,把变量直接写到sftp命令里面,把传输工具和数据提取分为两个部分,互不干涉。

3.sqluldr2 导出数据时,会遇到数据不换行  分隔符不起作用的情况,这里做个简单总结

field:指定字段分隔符,默认为逗号(单词不要打错了!!!)


record:指定记录分隔符,默认回车换行,windows为换行,具体请查看ASCII,0x0d:回车,0x0a:换行 TAB键=0x09,|=0x7c,&=0x26,双引号=0x22,单引号=0x27

我是这么写的

/opt/oracle/db01/app/oracle/product/11.2.0/bin/sqluldr2 user/password@172.xx.xx.1xx/orcl  sql=/dev/yj/GetDbData/5gGou/query.sql  field="," record=0x0d0x0a batch=yes rows=200000  file=/dev/yj/GetDbData/5gGou/5ggou_data.txt head=yes charset=utf8

4.客观的说,这次用定时任务+sftp 传输脚本 把我坑惨了,服务器对expect支持相当有限,各种奇葩问题,网上少之又少,遇到not found的问题,你就用全路径 遇到定时任务无法调用 sftp传输脚本,你就用一个shell脚本 调用一下传输脚本,我被下面这个问题烦透了的,send:spawn id exp1 not open

耽误了我相当长的时间,最后也只有根据报错一步一步的来,最后我把\r 改为\n 居然就搞定了,手动执行没问题的啊,怎么定时任务就执行不了,太难了,祝各位遇到类似问题的盆友好运吧

这篇关于Shell开发脚本 通过SFTP 定时 上传文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099907

相关文章

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

MySQL 定时新增分区的实现示例

《MySQL定时新增分区的实现示例》本文主要介绍了通过存储过程和定时任务实现MySQL分区的自动创建,解决大数据量下手动维护的繁琐问题,具有一定的参考价值,感兴趣的可以了解一下... mysql创建好分区之后,有时候会需要自动创建分区。比如,一些表数据量非常大,有些数据是热点数据,按照日期分区MululbU

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统