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

相关文章
|
11天前
|
Web App开发 Java Linux
Linux之Shell基本命令篇
Linux之Shell基本命令篇
Linux之Shell基本命令篇
|
18天前
|
弹性计算 Shell Perl
ecs服务器shell常用脚本练习(二)
【4月更文挑战第1天】shell代码训练(二)
102 1
|
18天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
72 1
|
20天前
|
Java Shell
SpringBoot启动脚本Shell
SpringBoot启动脚本Shell
15 0
|
21天前
|
Linux Shell Python
Linux执行Python脚本
Linux执行Python脚本
26 1
|
1天前
|
运维 监控 Shell
利用Shell脚本编写局域网监控软件:实时监测主机连接情况
本文介绍了如何使用Shell脚本创建一个局域网监控工具,以实时检查主机连接状态。脚本包括扫描IP地址范围检测主机可达性及使用`netstat`监控ESTABLISHED连接。此外,还展示了如何每60秒将连接数数据自动提交到指定网站API,以便实时跟踪网络活动。这个自动化监控系统有助于提升网络安全性和故障排查效率。
6 0
|
2天前
|
Shell
Shell脚本之流程控制语句
Shell脚本之流程控制语句
|
3天前
|
JSON 运维 监控
训练shell常用脚本练习(三)
【4月更文挑战第14天】shell代码训练(三)
14 1
|
7天前
|
存储 弹性计算 Shell
ecs服务器shell常用脚本练习(十)
【4月更文挑战第11天】shell代码训练(十)
137 0
|
7天前
|
弹性计算 Shell Go
ecs服务器shell常用脚本练习(九)
【4月更文挑战第10天】shell代码训练(八)
124 0