MENU

『Shell脚本』自动备份文件到远程FTP服务器并删除指定日期前的备份

July 27, 2021 • Read: 485 • 默认分类

使用方法

我这里要把/home/wwwroot目录下面的所有文件备份到/home/wwwrootbak里面,并且保存为wwwroot20210727.tar.gz的压缩文件(20210727是指备份执行时当天的日期),然后只保留最近7天的备份,再把备份文件通过ftp服务器上传到指定空间,只保留最近7天的数据。

1、创建保存备份文件的目录:/home/wwwrootbak

cd /home
mkdir wwwrootbak

2、创建备份脚本文件:/home/wwwrootbak/wwwrootbak.sh

cd /home
cd  wwwrootbak
touch wwwrootbak.sh
vim wwwrootbak.sh

输入以下内容:

#!/bin/sh
BK_DR=/home/wwwrootbak    #备份文件存放路径
DB_DR=/home/wwwroot
DAYS=7                    #DAYS=7代表删除7天前的备份,即只保留最近7天的备份
LINUX_USER=root           #系统用户名
date=` date +%Y%m%d `

tar zcvf $BK_DR/wwwroot$date.tar.gz $DB_DR
chown -R $LINUX_USER:$LINUX_USER $BK_DR  #更改备份数据库文件的所有者
find $BK_DR -name "wwwroot*" -type f -mtime +$DAYS -exec rm {} \;  #删除7天前的备份文件(注意:{} \;中间有空格)
   
deldate=` date -d -7day +%Y%m%d `   #删除ftp服务器空间7天前的备份

ftp -n<   open 192.168.1.1  21 #打开ftp服务器。21为ftp端口
user ftpuser ftppwd  #用户名、密码
binary  #设置二进制传输
cd wwwrootbak  #进入ftp目录
lcd /home/wwwrootbak  #列出本地目录
prompt  #传输每个文件前进行提示
mput wwwroot$date.tar.gz   wwwroot$date.tar.gz   #上传目录中的文件   
mdelete wwwroot$deldate.tar.gz  wwwroot$deldate.tar.gz  #删除ftp空间7天前的备份
close
bye !   #断开连接

3、修改文件属性,使其可执行

chmod +x /home/wwwrootbak/wwwrootbak.sh

4、修改/etc/crontab

vi /etc/crontab
在下面添加  
5 2 * * * root /home/wwwrootbak/wwwrootbak.sh
表示每天凌晨2点5分执行备份

ps: yum install -y vixie-cron安装计划任务,某些系统上可能没有预装

命令解释

ftp -i -n 192.168.1.1

ftp常见的几个参数有:

-d:使用调试模式,但必须编辑 /etc/syslog.conf 文件并添加以下中的一项:user.info FileName 或 user.debug FileName。
-g:禁用文件名中的元字符拓展,即取消全局文件名。
-i :关闭多文件传输中的交互式提示。
-n:防止在起始连接中的自动登录。否则, ftp 命令会搜索 $HOME/.netrc 登录项,该登录项描述了远程主机的登录和初始化过程。
-v:显示远程服务器的全部响应,并提供数据传输的统计信息,即在程序运行时显示详细的处理信息。
user ftpuser ftppwd

ftpuser:登录FTP时的用户名
ftppwd:登录FTP时的密码

binary

FTP文件传输类型有: ascii、binary、ebcdic、image、local M 和 tenex。

– ascii:将文件传输类型设置为网络 ASCII。此类型为缺省值,即默认使用ascii方式进行传输。
– binary:将文件传输类型设置为二进制映像。需要使用binary方式传输的文件类型有ISO文件、可执行文件、压缩文件、图片等。此类型可能比 ASCII 传送更有效。
– ebcdic:将文件传输类型设为 EBCDIC。
– image:将文件传输类型设置为二进制映像。此类型可能比 ASCII 传送更有效。
– local M:将文件传输类型设置为本地。M 参数定义每计算机字位的十进制数。此参数没有缺省值。
– tenex:将文件传输类型设为 TENEX 机器需要的类型。
hash

当用get或put命令传送一个数据块时,让FTP显示一个#,这是看得见的确定数据在传输的信号,在用户不确信网络是否工作时有用。当传输很大的文件时,如果FTP已显示这种信息,表示传输正在进行。hash命令是一个布尔变量式的命令,用hash命令打开显示#开关,再用hash命令关闭显示。

cd 到FTP上对应路径
lcd 到本地的对应路径
prompt

使用mget或mput时,prompt命令让FTP在传输每个文件前进行提示,这样防止覆盖已有的文件。若发出prompt命令时已经启动了提示,FTP将把提示关掉,此时再传输所有的文件则不会有任何提问。

mput-上传多个文件
put-上传单个文件
mget-下载多个文件
get-下载单个文件
注:mget . 每下载一个文件,都会有提示。如果要除掉提示,则在mget . 命令前先执行:prompt off
bye

结束文件传输会话并退出 ftp 命令,与quit命令相同。

... << EOF
#execute shell
EOF

EOF只是一个分界符标志,完全可以用abc, ! 等替换,也一样的功能,只是大家都习惯用EOF来表示。
<<用法:当shell看到<<的时候,它就会知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。因此分界符可以是定义的任何字符串。


传多个文件 put-上传单个文件 mget-下载多个文件 get-下载单个文件

扩展

- - - The END - - -
  • 文章作者:谭先生
  • 版权所有:文章转载时,注明出处即可!
  • 本站部分资源收集于网络,纯个人收藏,无商业用途,如有侵权请及时告知!
  • Last Modified: August 3, 2021
    Archives QR Code Tip
    QR Code for this page
    Tipping QR Code
    阅读:485