上一章将ssh免密登陆的功能实现了。那么现在就将领导的需求完成吧。
准备工作
- 编写备份脚本
- 测试脚本
- 安装cron (一般都有安装,但是我这个奇葩服务器却没有安装,所以就来说明一下)
- 生成定时任务
基本就是上述步骤了。现在就上手做吧。
cd
一个目录,直接touch
一个文件bak_file.sh
然后对该文件进行编辑touch bak_file.shvim bak_file.sh
小轩这里直接使用了vim bak_file.sh
当编辑完成并:wq!
的时候就会生成一个名为bak_file.sh的文件。效果是一样的编写脚本
#!/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分备份.zipzip -r $remoteFileName$date备份.zip $remoteFileName# 删除未打包目录rm -rf $remoteFileName`
编写完以上代码按ESC键输入(英文状态):wq!
回车保存
之后修改bak_file.sh文件的权限。
chmod u+x bak_file.sh
给当前用户添加执行权限
- 测试脚本(亲测可行~)
./bak_file.sh
接下来安装cron工具
首先查看一下当前系统中有没有cron这个工具
crontab -u root -l
这个命令是用来查看 root 用户当前的定时任务列表的。
如果出现:-bash: crontab: command not found
则代表没有安装cron
在centos中小轩直接用yum -y install crontabs
进行安装
这里还是简要说明一下 cron的使用方法吧。
- 查看服务是否启动 : service crond status
- 停止服务: service crond stop
- 启动服务: service crond start
- 重新加载配置文件: service crond reload
- 给一个用户添加一条定时任务:crontab -u root -e 这样会进入编辑模式。只要会使用vim,vi的童鞋这里是没有问题的,问题是怎么写~这个待会说~
- 删除用户的定时任务:crontab -u root -r 会删除所有哦
- 上面说过这个命令了,查看用户定时任务列表: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.*为文件名。
嗯到此定时任务完成。
总结:
此次编写是现学现卖。
- 首先以上脚本没有什么扩展性,只是为了完成当前的一个任务而做。其实可以将scp的相关信息参数化,将要保存的路径也参数话,不过可以设置成不传参,使用默认值即可。
- 没有做验证。不能保证scp时不出现问题。这是逻辑中的bug。还有待完善。
- 此次共用到了
- scp
- cron
- zip
- du -sh fileName
- date
- ntpdate -u ntp.api.bz -> 网络时间同步
等命令进行辅助操作。
- 之后可能还会也一个脚本用来正则匹配文件名,删除指定字符串格式的文件。即清理备份文件~继续学习~mark~~