scp自动备份

一台FTP服务器, 查看文件是否占用过多空间. 然后就scp到指定服务器. 删除过期文件

已提前使用

ssh-keygen -t rsa 
ssh-copy-id -i [email protected]

添加相关信任

本来想用 pexpect 模块自动输入密码. 然后发现这个在复制大文件似乎有问题. 查了一下说更改下面的文件

vi /usr/lib/python2.7/dist-packages/pxssh.py

# 说在这个地方再添加  self.sendline() time.sleep() 试了不行.
135         self.read_nonblocking(size=10000,timeout=1) # GAS: Clear out the cache before getting the prompt
136         time.sleep(0.1)
137         self.sendline()
#!/usr/bin/python

import os, sys, re, datetime, time, subprocess # , shutils

disk_space = os.statvfs("/local_home")
#f_bsize=0, f_frsize=1, f_blocks=2, f_bfree=3, f_bavail=4, f_files=5, f_ffree=6, f_favail=7, f_flag=8, f_namemax=9
# f_bavail : non root user available space
# f_bfree : all available space
# available = os.statvfs(mount).f_bfree * os.statvfs(mount).f_bsize
# all_space = os.statvfs(mount).f_blocks * os.statvfs(mount).f_bsize
# used = all_space - available

all_space = disk_space.f_blocks * disk_space.f_bsize / 1024
ava_space = disk_space.f_bfree * disk_space.f_bsize / 1024

if (ava_space * 1.0 / all_space) > 0.1:
  sys.exit()

def c_time(time_tmp=‘‘):
  if time_tmp == ‘‘:
    tmp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  else:
    tmp = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time_tmp))
  now = datetime.datetime.strptime(tmp, ‘%Y-%m-%d %H:%M:%S‘)
  return now

def chown_file():
  os.system("ssh -t [email protected] ‘chown -R server:root /bak/server‘")

def scp_file(cmd1, cmd2):
  child = subprocess.Popen("scp %s [email protected]:/bak/server/%s/" % (cmd1, cmd2), shell=True, stdout=subprocess.PIPE)
  child.wait()
  if child.returncode == 0:
    return True
  else:
    return False

for root,dirs,files in os.walk(‘/local_home/ftp‘):
  if len(re.findall("/", root)) == 3: #限制目录深度
    for i in dirs:
      if (c_time() - c_time(os.stat(root + "/" + i).st_mtime)).days > 7:
        if scp_file("-r " + root + "/" + i, "/".join((root + "/" + i).split(‘/‘)[3:-1])):
          os.system(‘rm -rf %s‘ % (root + "/" + i))
    for i in files:
      if (c_time() - c_time(os.stat(root + "/" + i).st_mtime)).days > 7:
        if scp_file(root + "/" + i, "/".join((root + "/" + i).split(‘/‘)[3:-1])):
          os.system(‘rm -rf %s‘ % (root + "/" + i))

chown_file()
#print "SCP OK"
时间: 2024-10-25 18:39:06

scp自动备份的相关文章

Linux 通过脚本实现远程数据的自动备份

在数据化飞速发展的今天,数据的定期备份成了数据安全首要考虑的问题.一旦出现了问题或故障,导致数据无法正常读取,那么原有的重要数据又如何得以保存下来呢.当然不能采用本机备份了,这样的备份风险很大,极有可能鸡飞蛋打,如果机器都宕掉了,本机备份的数据也就没法利用啦.因此,采取远程服务器作为备份机(远程数据备份)就变的很重要了. 远程手动备份费时费力而且还不及时,最好的办法就是通过脚本实现远程自动备份.但远程备份无论是通常通过SSH方法登陆到业务服务器(数据服务器),通过scp拷贝文件时都说需要不断输入

(转)linux自动备份oracle数据库并上传到备份服务器 脚本实现

实际项目中,备份数据是不可缺少的一步,完成数据的自动备份减少个人的工作量,是我们的目标.之前很少写过脚本,不过这些简单的操作还是可以做到的!话不多说,开始具体介绍:oracle版本:10.2.0操作系统:linuxredhat6.3具体操作:(1)在服务器上创建备份目录,并赋予权限mkdir -p /backup/oracledata #新建Oracle数据库备份目录 chown -R oracle:oinstall /backup/oracledata -R #设置目录权限为oinstall用

mysql、oracle在Linux和Windows下的简单自动备份

前面一段时间已经安装好了mysql.oracle等常用数据库,但是数据库在使用时必须做到定时备份,这样能够在数据库出现问题时及时恢复到可用状态.那么下面我们就在Linux和Windows环境下测试使用mysql和oracle的自动备份脚本. 1.Linux环境下 #!/bin/sh # Database info DB_USER="" DB_PASS="" DB_HOST="" DB_NAME="" # Others vars

Linux下Oracle定时自动备份方案

公司业务系统数据库是Oracle 11g,以前用的备份方案是用imp,但是这个方案的速度相对比较慢,最近经过研究,打算将备份方案改写为expdp形式,记录一下操作过程 服务器关系 两台服务器用作备份,包含正式环境服务器跟备份服务器,正式环境每天凌晨3点定时通过expdp导出全库,再用scp传输至备份服务器存档 实现scp免密码传输 直接运行scp传输命令,会提示输入密码,要实现无人值守定时运行,就需要让两台服务器的交互能够自动免密,在此通过建立ssh信任关系的方法来实现 在正式服务器上执行ssh

linux 自动备份脚本

首先我在/root/backup 目录下建立一个文件夹, #mkdir /root/backup/mysqlbackup 以后在每天五点钟,就会有一个文件保存在这里. 接着新建文件 #vim /root/mysqlautobak 输入: filename=` date +%Y%m%d ` mysqldump --all-databases -uroot -p(mysql密码)> /root/backup/mysqlbackup/mysql$file.sql 保存退出! 让它可以执行 #chomd

每日自动备份JENKINS_HOME至SVN

每日自动备份JENKINS_HOME至版本控制系统SVN Jenkins是一个可扩展的开源的持续集成工具,也是当下最流行的持续集成工具. Jenkins主要功能 易于安装(Easy installation) 易于配置(Easy configuration) 变更集支持(Change set support) 永久链接(Permanent links) RSS/Email/IM集成(RSS/E-mail/IM Integration) 事后标签(After-the-fact tagging) J

批处理实现每日自动备份和清除数据库文件

说明 利用任务计划,每天指定时间执行批处理文件: 1.实现自动Copy数据库备份文件至另一台主机上 2.自动删除指定天数的备份文件 1.批处理文件代码 CopyDB2Lan (factory).bat ************************* 代码开始处 *************************  @echo off color 0e cls title Copy DB 到 镜像主机下 (by [email protected])... set desthost=\\172.

SQL Server 数据库定时自动备份【转】

在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库.而备份数据库一般又是在凌晨时间基本没有数据库操作的时候进行,所以我们不可能要求管理员每天守到晚上1点去备份数据库.要实现数据库的定时自动备份,最常用的方式就是使用SQL Server代理中的作业.启动SQL Server Agent服务,然后在其中新建作业,作业中添加1个备份步骤,类型是T-SQL脚本,然后在命令中输入如下SQL语句,该语句实现了对数据库TestDB1的完整备份,备份文件在C盘Backup文件夹中,文件名就是T

Bat脚本学习-6:Oracle自动备份还原脚本

这次注释没写多少,先跳过一些吧 ::2.数据库过期备份删除 echo. echo. echo 二.正在清除过期的备份文件-- REM wscript.echo是vbs语法,相当于alert REM >是特殊字符,所以放在 for 命令里面需要使用转义符号^>,包括^&也是转义的& REM //Nologo屏弊输出:Prevent logo display: No banner will be shown at execution time for /f "tokens