一些shell脚本常常要实现的功能不仅仅是作用于自身服务器,有些还要作用于其他服务器。
#
举个简单的例子:
从myql服务器备份数据库,然后将数据库文件发送至备份服务器进行保存,正常来说我们会在mysql服务器创建shell脚本执行mysqldump进行备份,然后通过scp将文件发送至备份服务器。那么业务要求在应用服务器上面的巡检脚本结束后就执行备份呢?这边提供一个不用写程序调接口的方法:
#
我这边用导出sybase数据库来演示一下

在应用服务器上touch一个巡检脚本:

#!/bin/bash
......
#前面的巡检脚本就不写了,大伙应该都会
Usr=hello
Port=2233
IP=192.168.1.2
sh_File=sybase_dump.sh
db_user=sybaseuser
db_pw=123456
bak_dir=/opt/syabse/data_bak
db_name=class
declare -r date_now=`date +%Y%m%d%H%M`

#通过之前做好的互信直接免密登录到sybase数据库服务器,期间的操作记录到dump.log日志中(注意eeooff包裹住的过程)
ssh -l $Usr -p $Port $IP >log/dump.log 2>&1 << eeooff

#在数据库服务器上生成一个用于导出的shell脚本
touch $sh_File

#往生成的脚本写入导出命令(注意EOF_1包裹住的那部分)
cat >$sh_File << EOF_1

#!/bin/bash
isql -U $db_user -P $db_pw <<EOF_2
use master
go
dump database $db_name to 'compress::$bak_dir$db_name-$date_now-1-1.dmp'
stripe on 'compress::$bak_dir$db_name-$date_now-1-2.dmp'
stripe on 'compress::$bak_dir$db_name-$date_now-1-3.dmp'
stripe on 'compress::$bak_dir$db_name-$date_now-1-4.dmp'
go
quit
EOF_2
echo "数据库备份文件已经成功导出!"
mv $bak_dir$db_name-$date_now-1-* $mv_dir
EOF_1
#在数据库服务器上执行生成的脚本
sh $sh_File
#执行完成后移除脚本
rm -rf $sh_File
exit

eeooff

这样就实现了一个shell脚本控制多台服务器的功能