开发者社区> 技术小阿哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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.Linux shell编程(常用命令)
(创建于2018/1/31) 文件操作 1.显示列表 ls -l 以列表的形式显示 ls -la 以列表的形式显示所有,包括隐藏文件 ls -l ja* 通配符查找,查找的如果是文件夹结果是以列表形式显示文件夹下第一层的所有文件和文件夹 ls -l...
841 0
Linux下Shell编程
Linux的shell编程  1、什么是shell? 当一个用户登录Linux系统之后,系统初始化程序init就为每一个用户运行一个称为shell(外壳)的程序。 shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序。一般的Linux系统都将bash作为默认的shell。
1337 0
linux shell 编程
shell 编程 1.简述 利用vi等文本编辑器编写Shell脚本的格式是固定的,如下: #!/bin/bash #comments Your commands go here 首行中的符号#!告诉系统其后路径所指定的程序bash即是解释此脚本文件的Shell程序。 除第一行外,以#开头的行就是注释行,直到此行的结束。如果一行未完成,可以在行尾加上",这个符号表明下一行与此
1109 0
Linux shell编程 10 ---- 循环结构
 1 for循环     1 for循环是Linux Shell中常用的结构,for循环有三种结构;一种是列表for循环,第二种是不带列表的for循环,第三种是类C风格的for循环。
786 0
13688
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载