自动备份远程机器的脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动备份远程机器的脚本相关的知识,希望对你有一定的参考价值。

上一章将ssh免密登陆的功能实现了。那么现在就将领导的需求完成吧。

准备工作

  1. 编写备份脚本
  2. 测试脚本
  3. 安装cron (一般都有安装,但是我这个奇葩服务器却没有安装,所以就来说明一下)
  4. 生成定时任务

基本就是上述步骤了。现在就上手做吧。

    1. cd一个目录,直接touch一个文件bak_file.sh然后对该文件进行编辑
    <pre>touch bak_file.sh
    

    vim bak_file.sh

    小轩这里直接使用了<code>vim bak_file.sh</code>当编辑完成并<code>:wq!</code>的时候就会生成一个名为bak_file.sh的文件。效果是一样的
    
    1. 编写脚本
    #!/bin/bash
    # 远程复制目录到指定目录  copy files from remote directory to local directory
    # 声明一个变量用来表示要备份的目录(当然可以写成从控制台输入,这样脚本就更通用了)
    remoteFileName=aaa
    # 调用scp命令,其中port为服务器(上篇中的机器A)开放的ssh端口号 ipaddress为服务器的ip地址(可以使用公网或局域网)
    scp -Pprot -r admin@ipaddress:/home/public/$remoteFileName /home/hart/backup/
    # 当scp完成时,输出此信息
    echo " -----------------------我是华丽的分割线---------------------"
    # 声明一个变量用来获取当前系统时间并格式化为yyyy年MM月dd日hh时mm分
    date=$(date "+%Y年%m月%d日%H时%M分")
    # 将备份的目录进行打包 打包名为:aaa2017年12月15日10时21分备份.zip
    zip -r $remoteFileName$date备份.zip $remoteFileName
    # 删除未打包目录
    rm -rf $remoteFileName`
    

    编写完以上代码按ESC键输入(英文状态):wq!回车保存
    之后修改bak_file.sh文件的权限。


    chmod u+x bak_file.sh 给当前用户添加执行权限


    3. 测试脚本(亲测可行~)


    ./bak_file.sh


接下来安装cron工具
首先查看一下当前系统中有没有cron这个工具

crontab -u root -l
这个命令是用来查看 root 用户当前的定时任务列表的。
如果出现:-bash: crontab: command not found则代表没有安装cron

在centos中小轩直接用yum -y install crontabs进行安装
这里还是简要说明一下 cron的使用方法吧。

  1. 查看服务是否启动 : service crond status
  2. 停止服务: service crond stop
  3. 启动服务: service crond start
  4. 重新加载配置文件: service crond reload
  5. 给一个用户添加一条定时任务:crontab -u root -e 这样会进入编辑模式。只要会使用vim,vi的童鞋这里是没有问题的,问题是怎么写这个待会说
  6. 删除用户的定时任务:crontab -u root -r 会删除所有哦
  7. 上面说过这个命令了,查看用户定时任务列表:crontab -u root -l

大概就这些吧。现在说一个怎么在这个crontab -u root -e 中添加任务。其实在/etc/crontab中写的很清晰了。来我们看看。

/etc/crontab

"#"是注释 ,不多解释

第一个"*"跟着连线可以看到可以输入数字0-59 意为 分钟

第二个"*"跟着连线可以找到可以输入数字0-23 意为 小时

第三个"*"跟着连线可以找到可以输入数字1-31 意为 天

第四个"*"跟着连线可以找到可以输入数字1-12 意为 月份

第五个"*"跟着连线可以找到可以输入数字0-6 意为 每一周的天数 周日为0或7 或者直接输入 sun,mon,tue,wed,thu,fri,sat
意思就是周几~~

既然这么简单明了,那就好办了。像小轩。则写了一条 0 0 15 * * /home/hart/can-not-delete/bak_file.sh 意为每月15号0时0分执行/home/hart/can-not-delete/bak_file.sh这个脚本。对就是这样写。注意!每个"*"之间都要有一个空格,最后一个"*"与脚本之间也有空格不然会报错的哟:

wrong

此时输入y可以进行修改。如果输入n则会生成一个文件在/tmp/目录下面。以crontab.*为文件名。

嗯到此定时任务完成。

总结:

此次编写是现学现卖。

  1. 首先以上脚本没有什么扩展性,只是为了完成当前的一个任务而做。其实可以将scp的相关信息参数化,将要保存的路径也参数话,不过可以设置成不传参,使用默认值即可。
  2. 没有做验证。不能保证scp时不出现问题。这是逻辑中的bug。还有待完善。
  3. 此次共用到了
    1. scp
    2. cron
    3. zip
    4. du -sh fileName
    5. date
    6. ntpdate -u ntp.api.bz -> 网络时间同步
      等命令进行辅助操作。
  4. 之后可能还会也一个脚本用来正则匹配文件名,删除指定字符串格式的文件。即清理备份文件继续学习mark~~

以上是关于自动备份远程机器的脚本的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本每天自动进行数据库备份与远程复制

centos7关机自动进行远程服务器备份

linux自动备份文件 并上传到远程服务器 脚本实现

Debian下自动备份文件并上传到远程FTP服务器且删除指定日期前的备份Shell脚本

Linux下mysql定时自动备份并FTP到远程脚本

gitlab自动备份脚本auto_backup_to_remote