Linux下Shell 备份脚本集合

简介:

说到Shell大家都不陌生,Shell是Linux下批处理脚本文件,类似windows下的Vbs脚本等等,能协助我们完成一些自动化的任务,我们前面也介绍了一些Shell脚本协助我们完成了一些计划任务,当然说计划任务也不对,是通过计划任务来调用shell脚本来完成一些自动化任务。废话不多说了,来点实际的,今天呢,我们主要介绍的是环境还是工作中遇到的问题,通过远程来完成一些还原任务,

 

1.首先是,我们需要将本地备份目录下的Weaver.proternt文件定时还原覆盖到指定目录下;

将/OAFS/Bkfiles/abc.txt文件还原到本地的/OAFS/WEAVER/ecology/abc.txt

1
2
3
4
5
6
7
#!/bin/bash
BK_PROFEAM= /OAFS/Bkfiles/abc .txt
LOCAL_PROFEAM=OAFS /WEAVER/ecology
function  copy() {
` which  cp ` -rf $BK_PROFEAM $LOCAL_PROFEAM
}
copy

编写后,我们需要chmod 770 xxxx

2. 我们需要将本地/OAFS/WEAVER_BACKUP目录下的备份压缩文件定时解压缩及覆盖到远程服务器192.168.6.38下的/OAFS目录下,

如果目标存在,我们就需要解压覆盖操作。

image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/bash
LOCALBAKDIR= /OAFS/WEAVER_BACKUP
RMTRESTDIR= /OAFS
RMT_HOST=192.168.6.38
RMT_USER=root
RMT_CMD= "$(which ssh) $RMT_USER@$RMT_HOST"
 
function  is_alive() {
     ` which  ping ` -c 4 $RMT_HOST > /dev/null  2>&1
     if  "$?"  - ne  0 ];  then
         echo  2
     else
         echo  0
         fi
}
 
function  mktmpdir() {
     $RMT_CMD  mkdir  -p  /tmp/OAFS
}
 
function  rmvtmpdir() {
     $RMT_CMD  rm  -rf  /tmp/OAFS/ *
}
 
function  get_last_targz() {
     echo  $( ls  -lt $LOCALBAKDIR |  awk  { 'print $9' } | grep  - v  ^$ | head  -n 1)
}
 
function  copy() {
     yum  install  -y openssh-clients > /dev/null  2>&1
     $RMT_CMD yum  install  -y openssh-clients > /dev/null  2>&1
     scp  -q $LOCALBAKDIR/$(get_last_targz) $RMT_USER@$RMT_HOST: /tmp/OAFS/
     $RMT_CMD  tar  zxvf  /tmp/OAFS/ $(get_last_targz) -C $RMTRESTDIR
}
 
if  "$(is_alive)"  - eq  0 ];  then
     mktmpdir
     copy
     rmvtmpdir
else
     echo  "$RMT_HOST can not be accessed via port 22, please check"
fi

需要注意:因为是远程服务器,我们执行脚本一般是需要使用密码进行验证的,由于是自动化任务,所以我们不能输入密码,所以我们需要使用ssh-key进行验证;

所以我们需要在运行脚本的服务器上执行注册秘钥文件:

1
ssh -keygen -t rsa      回车

clip_image001

创建目录,认证目录;然后一路回车

clip_image002

在/root/.ssh 目录下生成了一对密钥文件

id_rsa   私钥

id_rsa.pub     公钥

clip_image003

1
ssh -copy- id  ipaddress

只在脚本执行的机器上;会自动将公钥拷贝到目标服务器上;

clip_image004

这样运行脚本就可以远程拷贝数据了;

3.我们将本地/OAFS/files/pdf文件下的所有内容远程拷贝及覆盖到目标文件夹/OAFS/pdf;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
RMT_HOST=192.168.6.38
RMT_USER=root
RMT_CMD= "$(which ssh) $RMT_USER@$RMT_HOST"
LOCAL_PDF= /OAFS/files/pdf
RMT_PDF= /OAFS/pdf
function  is_alive() {
` which  ping ` -c 4 $RMT_HOST > /dev/null  2>&1
if  "$?"  - ne  0 ];  then
echo  2
else
echo  0
fi
}
function  copy() {
scp  -q -r $LOCAL_PDF/* $RMT_USER@$RMT_HOST:$RMT_PDF
}
if  "$(is_alive)"  - eq  0 ];  then
copy
else
echo  "$RMT_HOST can not be accessed via port 22, please check"
fi

如果我们需要对操作的结果进行log记录,我们需要添加对应的判断即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash
RMT_HOST=192.168.6.38
RMT_USER=root
RMT_CMD= "$(which ssh) $RMT_USER@$RMT_HOST"
LOCAL_PDF= /OAFS/files/pdf
RMT_PDF= /OAFS/pdf
function  is_alive() {
     ` which  ping ` -c 4 $RMT_HOST > /dev/null  2>&1
     if  "$?"  - ne  0 ];  then
         echo  2
     else
         echo  0
         fi
}
function  copy() {
     scp  -q -r $LOCAL_PDF/* $RMT_USER@$RMT_HOST:$RMT_PDF
if  "$?"  - eq  0 ];  then
     echo  "$(date +%Y-%m-%d_%H:%M:%S) - copy $LOCAL_PDF from localhost to $RMT_HOST:$RMT_PDF is successfull"  >> /var/log/pdfcopy .log
else
     echo  "$(date +%Y-%m-%d_%H:%M:%S) - copy $LOCAL_PDF from localhost to $RMT_HOST:$RMT_PDF is failed"  >> /var/log/pdfcopy .log
fi
}
if  "$(is_alive)"  - eq  0 ];  then
     copy
else
     echo  "$RMT_HOST can not be accessed via port 22, please check"
fi


通过比对我们知道,就是在copy的函数里面添加了两句

1
2
3
4
5
if  "$?"  - eq  0 ];  then
     echo  "$(date +%Y-%m-%d_%H:%M:%S) - copy $LOCAL_PDF from localhost to $RMT_HOST:$RMT_PDF is successfull"  >> /var/log/pdfcopy .log
else
     echo  "$(date +%Y-%m-%d_%H:%M:%S) - copy $LOCAL_PDF from localhost to $RMT_HOST:$RMT_PDF is failed"  >> /var/log/pdfcopy .log
fi

执行结果,我们可以查看log;

cat /var/log/pdfcopy.log


wKiom1eoBHeDxTlmAAAZAXTBaHk785.png-wh_50


最后我们可以通过crontab -e进行定义计划任务进行执行;

注:如果当前服务器没有crontal命令,我们需要安装;

1
yum  install  crontals
1
2
crontab  –e 的格式我们上一次有介绍;所以就不多介绍了,我们简单的说几个列子即可
分别为:

每天晚上23:10分执行脚本;

每周5的23:30执行脚本和每周6的1:10执行脚本

image


本文转自 高文龙 51CTO博客,原文链接:http://blog.51cto.com/gaowenlong/1834470,如需转载请自行联系原作者

目录
打赏
0
0
0
0
265
分享
相关文章
|
2月前
|
Veritas NetBackup 11 for Linux & Windows - 领先的企业备份和恢复解决方案
Veritas NetBackup 11 for Linux & Windows - 领先的企业备份和恢复解决方案
43 0
Veritas NetBackup 11 for Linux & Windows - 领先的企业备份和恢复解决方案
|
7天前
|
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
62 25
|
4天前
|
shell_42:Linux参数移动
总的来说,参数移动是Linux shell脚本中的一个重要概念,掌握它可以帮助我们更好地处理和管理脚本中的参数。希望这个解释能帮助你理解和使用参数移动。
33 18
|
16天前
|
阿里云linux服务器使用脚本通过安全组屏蔽异常海外访问ip
公网网站可能会遭受黑客攻击导致访问异常,使用此脚本可以屏蔽掉异常IP 恢复访问。也可自行设置定时任务定期检测屏蔽。
117 28
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
93 28
|
3月前
|
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
156 32
|
2月前
|
linux命令详细说明以及案例
本文介绍了常用的 Linux 命令及其详细说明和示例,包括:`ls`(列出目录内容)、`cd`(更改目录)、`rm` 和 `mv`(删除与移动文件)、`grep`(搜索文本)、`cat`(显示文件内容)以及 `chmod`(更改文件权限)。每个命令均配有功能描述、选项说明及实际案例,帮助用户更好地掌握 Linux 命令的使用方法。
160 56
Linux系统中的cd命令:目录切换技巧
踏过千山,越过万水,人生就是一场不断前行的旅程,总充满了未知与挑战。然而,“cd”命令如同你的旅伴,会带你穿梭在如棋盘一般的文件系统中,探索每一处未知。希望你能从“cd”命令中找到乐趣,像是掌控了一种络新妙的魔法,去向未知进发,开始你的探索之旅。
99 24
|
11天前
|
Linux命令的基本格式解析
总的来说,Linux命令的基本格式就像一个食谱,它可以指导你如何使用你的计算机。通过学习和实践,你可以成为一个真正的“计算机厨师”,创造出各种“美味”的命令。
56 15
Linux系统之su命令的基本使用
Linux系统之su命令的基本使用
73 2
Linux系统之su命令的基本使用
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等