python2.7通过scp上传文件到指定服务器
1 说明
实现功能:
扫描指定文件目录下文件,通过scp上传到指定服务器目录下
程序结构简单说明:
- 包含两个线程,线程一:扫描文件线程;线程二:消费文件线程;
- 线程一:扫描指定文件目录下文件,把符合要求的文件名加入到全局列表中;
- 线程二:遍历全局列表,取出文件名,并获取该文件最后修改时间;
- 判断文件最后修改时间与当前时间只差是否大于阈值;
- 如果大于阈值则通过scp上传文件到指定服务器,上传成功删除文件并从全局列表中移除。
2 SSH免密登录环境
因为是通过scp自动上传,无需人工干预,所以需要配置两台服务的ssh免密登录;
假如本次服务器分别为A和B,A上传文件到B,按照如下步骤配置ssh免密登录环境:
1)在A机下生成公钥/私钥对。
[root@A ~]# ssh-keygen -t rsa -P ''
2)把A机下的/root/.ssh/id_rsa.pub 复制到B机的 /root/.ssh/authorized_keys文件里,先要在B机上创建好 /root/.ssh 这个目录,用scp复制。
3)authorized_keys的权限要是600
4)A机登录B机
3 python源码
#coding=utf-8
"""
作用说明:
通过scp上传文件,需要两台无服务预先配置好ssh无密登录,至于如何配置
可以网上查看教程。
线程一:扫描指定文件目录下的文件,并添加到全局列表中
线程二:扫描全局列表,把文件上传到指定的服务器中,上传成功则删除该文件,并从全局列表中移除
"""from threading import Thread, Lock
import signal
import time
import datetime
import os
import sysftp_list = [] # 全局列表
flag_time = 5 # 时间阈值,表示当前时间戳与文件最后修改时间大于该值时才操作
ftp_path="/tmp/data" # 示例:要扫描的文件目录
server=" root@192.168.101.22:/data/" # 示例:上传到服务器的文件目录"""
path:要扫描的文件目录
file_list: 将扫描到文件加入该列表中
key: 扫描文件时,有的文件不需要,以key关键词判断该文件是否为需要的文件
"""
def get_file_list(path, file_list, key):files=os.listdir(path)for f in files:if key not in f:continuefile_with_path = path+"/"+fif file_with_path in file_list:continueif not os.path.isdir(file_with_path):try:time_str = os.path.getmtime(file_with_path)file_time = int(time_str)now_time = int(time.time())#print("time :", now_time-file_time)except OSError as err:continueif((now_time-file_time) > flag_time):lock.acquire()file_list.append(file_with_path)lock.release()#print("[## add ##]add file %s to global list"% file_with_path)"""
file_list: 扫描文件列表,并把文件上传到服务器,上传成功后,删除文件,并从全局列表中移除
"""
def send_file(file_list):year = datetime.datetime.now().yearmonth = datetime.datetime.now().monthday = datetime.datetime.now().dayfor f in file_list:if f.strip():#上传到服务指定目录下子目录以 年月日 分类shell_cmd="scp "+f+server+"/"+str(year)+"/"+str(month)+"/"+str(day)ret_shell=os.system(shell_cmd)#print("shellcmd:",shell_cmd)lock.acquire()file_list.remove(f)lock.release()os.remove(f)#print("[-- remove --]remove file %s "% f)def quit(signum, frame):print("You choose to stop me")sys.exit()"""
线程一:扫描文件目录,将符合要求文件名添加到全局列表中
"""
def traverse_dir():global ftp_listwhile True:get_file_list(ftp_path, ftp_list, ".bin")time.sleep(2)#print("======================== start to traverse ===========================");#print("[traverse]:%s"% ftp_list)"""
线程二:扫描全局列表,将文件上传到指定服务器,上传成功,删除文件,并从全局列表中移除
"""
def consume_file():global ftp_listwhile True:send_file(ftp_list)time.sleep(2)#print("consume:%s"%ftp_list)if __name__=='__main__':try:signal.signal(signal.SIGINT, quit)signal.signal(signal.SIGTERM, quit)lock = Lock() #创建线程锁thread_product = Thread(target=traverse_dir)thread_consume = Thread(target=consume_file)thread_product.setDaemon(True)thread_product.start()thread_consume.setDaemon(True)thread_consume.start()while True:passexcept Exception, exc:print exc
转载于:https://www.cnblogs.com/liuguanghai6455/p/10636468.html
python2.7通过scp上传文件到指定服务器相关推荐
- 使用WinSCP上传文件到指定服务器
使用WinSCP上传文件到指定服务器 文章目录 使用WinSCP上传文件到指定服务器 前言 安装WinSCP 新建站点 传输文件 实现公网访问 前言 个人认为 FlashFTP是一款十分好用的文件上传 ...
- java web ftp上传_java web FTPClient实现上传文件到指定服务器
FPClient 实现上传文件到指定服务器,供大家参考,具体内容如下 调用 FileInputStream in=new FileInputStream(new File(fileUrl)); mov ...
- Java实现上传文件到指定服务器指定目录
前言需求 使用freemarker生成的静态文件,统一存储在某个服务器上.本来一开始打算使用ftp实现的,奈何老连接不上,改用jsch.毕竟有现成的就很舒服,在此介绍给大家. 具体实现 引入的pom ...
- 使用 scp 上传文件到远程服务器/从远程服务器下载文件到本地
Intro wuyujin@ubuntu18:~/Desktop/project/网站部署$ whatis scp scp (1) - secure copy (remote file copy pr ...
- scp 上传文件、指定端口上传
默认端口(22端口)上传 scp C:\Users\CY\Desktop\test.apk root@192.151.13.11:/root 指定端口上传 scp -P 12301 C:\Users\ ...
- java使用sftp上传(文件)图片到服务器中
最近租了一个服务器,想着上线个小项目,结果图片上传卡壳了,自从11号看了一篇文章就入了ftp的坑.研究了十多个小时的ftp文件传输,无果.睡前看到了一篇关于sftp上传文件的文章,抱着试一试的心态,结 ...
- scp 上传文件到服务器
scp 上传文件到服务器 scp命令 scp 本地路径 服务器路径 如 scp /Users/***/Desktop/text.zip root@****:/opt/ 本来是想通过"scp ...
- android里面通过scp上传文件
我网上搜索了到使用ganymed-ssh2-build210.jar来实现scp上传文件功能.我就不说具体的方法了.有些网友比我还认真写文档,写的比我漂亮多了. 问题一: 使用的时候,我发现总是连不上 ...
- 连接腾讯云服务器操作+SCP上传文件
1.连接腾讯云服务器 linux打开终端(windows打开cmd) ssh -i "<下载的与云服务器关联的私钥的绝对路径>" <username>@&l ...
最新文章
- 主流深度学习框架对比(TensorFlow、Keras、MXNet、PyTorch)
- 拖动效果,防止选中文字兼容代码
- 解决loaded more than 1 DLL from .libs和No metadata found in lib\site-packages两个错误
- C++ 二进制文件读操作
- 中艺人脸识别考勤机使用方法_人脸识别考勤机的使用方法及注意事项 - 全文
- 综合场景搞清楚同步 异步 阻塞 非阻塞
- Java运行时数据区域
- RNN Attention
- Http之客户端请求服务器,服务器响应客户端。通过Handler在主线程中读取数据
- java类的参考文献,太完整了!
- 计算机系最好的985大学排名,2017年全国“985”大学排名及王牌专业全解析
- 联想MIIX510 黑苹果教程 整机升级
- css 图片放大1.2倍,什么是二倍图?怎样使用二倍图?
- RationalDMIS 2020 编程技巧
- 温莎大学的计算机专业,2017加拿大计算机专业前七名
- SAP HANA XS ODATA使用参数展示具体数据
- android 头像球_【Android 界面效果44】Android之圆头像实例
- centos如何在官网下载以前的版本
- Android压缩包下载解压
- 2021年3月16刚进新公司做了四天就被劝退