自动备份远程机器的脚本

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

准备工作

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

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

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

    touch bak_file.sh
    vim bak_file.sh
    小轩这里直接使用了vim bak_file.sh当编辑完成并:wq!的时候就会生成一个名为bak_file.sh的文件。效果是一样的
  2. 编写脚本

#!/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 给当前用户添加执行权限

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


    ./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中写的很清晰了。来我们看看。

"#"是注释 ,不多解释

第一个"*"跟着连线可以看到可以输入数字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这个脚本。对就是这样写。注意!每个"*"之间都要有一个空格,最后一个"*"与脚本之间也有空格不然会报错的哟:

此时输入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~~

转载于:https://www.cnblogs.com/tdg-yyx/p/8036908.html

你可能感兴趣的:(自动备份远程机器的脚本)