说到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目录下,
如果目标存在,我们就需要解压覆盖操作。
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 回车
|
创建目录,认证目录;然后一路回车
在/root/.ssh 目录下生成了一对密钥文件
id_rsa 私钥
id_rsa.pub 公钥
1
|
ssh
-copy-
id
ipaddress
|
只在脚本执行的机器上;会自动将公钥拷贝到目标服务器上;
这样运行脚本就可以远程拷贝数据了;
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
最后我们可以通过crontab -e进行定义计划任务进行执行;
注:如果当前服务器没有crontal命令,我们需要安装;
1
|
yum
install
crontals
|
1
2
|
crontab
–e 的格式我们上一次有介绍;所以就不多介绍了,我们简单的说几个列子即可
分别为:
|
每天晚上23:10分执行脚本;
每周5的23:30执行脚本和每周6的1:10执行脚本
本文转自 高文龙 51CTO博客,原文链接:http://blog.51cto.com/gaowenlong/1834470,如需转载请自行联系原作者