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,如需转载请自行联系原作者

相关文章
|
4月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
2月前
|
存储 Unix Shell
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
73 17
|
2月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
184 3
|
2月前
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
75 4
|
3月前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
191 25
|
3月前
|
Linux Shell
shell_42:Linux参数移动
总的来说,参数移动是Linux shell脚本中的一个重要概念,掌握它可以帮助我们更好地处理和管理脚本中的参数。希望这个解释能帮助你理解和使用参数移动。
66 18
|
3月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
189 28
|
Shell 索引
shell脚本入门到实战(四)- 数组
shell脚本入门到实战(四)- 数组
117 0
|
Shell
shell脚本入门到实战(三) - 变量
shell脚本入门到实战(三) - 变量
137 0
|
Shell Linux 人机交互
shell脚本入门到实战(二)--shell输入和格式化输出
shell脚本入门到实战(二)--shell输入和格式化输出
621 0