server_patrol.sh服务器巡查脚本
server_patrol.sh
#!/bin/bash
#!/usr/bin/expect -f
#! auther by wangxp #定义一个变量
LANG="zh_CN.UTF-8"
PUB_KEY_FILE=$HOME/.ssh/id_rsa.pub
TITLE="XXXXX巡检报告 `date +%F`"
TXT_FILE_NAME="xjbg_`date +%y%m%d%H%M%S`.txt"
TXT_DIR="`pwd`/report"
TXT_NAME="${TXT_DIR}/${TXT_FILE_NAME}"
LANG="zh_CN.UTF-8"
#定义应用服务器,用空格分开。app_server是服务器ip地址;app_server_user是服务器用户名;app_server_pwd是服务器用户对应密码
app_server=(192.168.0.1 192.168.0.2 192.168.0.3)
app_server_user=(user1 user2 user3)
app_server_pwd=(pwd1 pwd2 pwd3)
#定义数据库服务器,用空格分开,db_server是数据库ip地址;db_server_user是oracle服务器用户名;db_server_pwd是oracle服务器用户对应密码;db_oracle_link是oracle数据库链接的dblik(用户名/密码@服务器ip:1521/实例名)
db_server=(192.168.1.1 192.168.1.2)
db_server_user=(oracle oracle)
db_server_pwd=(dbpwd1 dbpwd2)
db_oracle_link=(dblink1 dblink2) # 自动生成密钥对函数
auto_keygen (){
/usr/bin/expect<<EOF
# 设置超时时间,单位为秒
set timeout 3
# 触发交互命令
spawn ssh-keygen
# 开始捕获
expect {
# 当捕获到此次字符串时, 发送回车,并且继续捕获
".ssh/id_rsa)" { send "\n"; exp_continue }
"no passphrase):" { send "\n"; exp_continue}
"again:" { send "\n"; exp_continue }
}
EOF
} ## 复制公钥到远端的函数
send_key () {
/usr/bin/expect <<EOF
set timeout 30
spawn ssh-copy-id $2@$1
expect {
"yes/no" { send "yes\n"; exp_continue }
"password:" { send "$3\n"} }
expect eof
EOF
}
#免密码登录的函数
ssh_server () {
/usr/bin/expect <<EOF | sed -n '/password:/,$p'|grep -v 'password:'|grep -v '未找到命令' >> ${TXT_NAME}
set timeout 10
spawn ssh $2@$1 $4
expect {
"*yes/no*" { send "yes\r";exp_continue}
"*password*" { send "$3\r"}
}
expect eof
EOF
} # 假如公钥文件不存在,说明需要创建密钥对
if [ ! -f ${PUB_KEY_FILE} ];then
auto_keygen
fi
# 假如报告文件夹不存在,就创建报告文件夹
if [ ! -d "${TXT_DIR}" ];then
mkdir "${TXT_DIR}"
fi
#ip地址数量校验
if [ ${#app_server[@]} != ${#app_server_user[@]} ];then
echo "应用服务器ip地址数和用户数量不匹配!"
exit 0
elif [ ${#app_server[@]} != ${#app_server_pwd[@]} ];then
echo "应用服务器ip地址数和用户密码数量不匹配!"
exit 0
elif [ ${#db_server[@]} != ${#db_server_pwd[@]} ];then
echo "服务库服务器ip地址数和用户密码数量不匹配!"
exit 0
elif [ ${#db_server[@]} != ${#db_server_pwd[@]} ];then
echo "数据库服务器ip地址数和用户密码数量不匹配!"
exit 0
elif [ ${#db_server[@]} != ${#db_oracle_link[@]} ];then
echo "数据库服务器ip地址数和oracle数据库链接数量不匹配!"
exit 0
fi echo ${TITLE}
echo ${TITLE}>${TXT_NAME}
echo "数据库服务器数: ${#db_server[@]}"
#生成数据库检查报告
for (( i=0; i<${#db_server[@]}; i++))
do
echo "生成数据库服务器${db_server[$i]}的检查报告..."
#ssh_server ${db_server[$i]} ${db_server_user[$i]} ${db_server_pwd[$i]} "bash -s" < /home/oracle/test/a.sh > diskusage.txt
echo -e "\n================================================================================" >>${TXT_NAME}
echo "1、数据库服务器IP: ${db_server[$i]}" >>${TXT_NAME}
echo "2、巡检时间: `date "+%F %T 星期%a"`" >>${TXT_NAME}
echo -e "3、服务器内核信息: \c">>${TXT_NAME}
ssh_server ${db_server[$i]} ${db_server_user[$i]} ${db_server_pwd[$i]} "uname -r"
echo -e "4、服务器主机名: \c" >>${TXT_NAME}
ssh_server ${db_server[$i]} ${db_server_user[$i]} ${db_server_pwd[$i]} "hostname"
echo "5、数据库服务器状态:" >>${TXT_NAME}
sqlplus -S -L ${db_oracle_link[$i]} << EOF| sed -n '/INSTANCE_NAME/,$p' >>${TXT_NAME}
select instance_name,status,(select sysdate from dual) as DB_TIME from v\$instance;
EOF
echo "6、磁盘使用详情:" >>${TXT_NAME}
ssh_server ${db_server[$i]} ${db_server_user[$i]} ${db_server_pwd[$i]} "df -hT"
echo "7、数据库表空间详情:" >>${TXT_NAME}
sqlplus -S -L ${db_oracle_link[$i]} << EOF |sed -n '/TABLESPACE_NAME/,$p'>> ${TXT_NAME}
set LINESIZE 200;
set PAGESIZE 100;
col "TABLESPACE_NAME" for a20;
col "MAX_SIZE(G)" for a15;
col "USEAGE_SIZE(G)" for a15;
col "FREE_SIZE(G)" for a15;
col "USEAGE_RATE(%)" for a15;
SELECT a.tablespace_name as "TABLESPACE_NAME",
DECODE(TRUNC(total),0,REPLACE(TO_CHAR(total),'.', '0.'),TO_CHAR(total)) as "MAX_SIZE(G)",
DECODE(TRUNC(total - free),0,REPLACE(TO_CHAR(total - free),'.', '0.'),TO_CHAR(total - free)) as "USEAGE_SIZE(G)",
DECODE(TRUNC(free),0,REPLACE(TO_CHAR(free),'.', '0.'),TO_CHAR(free)) as "FREE_SIZE(G)",
DECODE(TRUNC(round((total-free)/total,6)*100),0,REPLACE(TO_CHAR(round((total-free)/total,6)*100),'.', '0.'),TO_CHAR(round((total-free)/total,6)*100)) AS "USEAGE_RATE(%)"
FROM (SELECT tablespace_name,ROUND(SUM(bytes)/(1024*1024*1024),6) free
FROM dba_free_space
GROUP BY tablespace_name) a,
(SELECT tablespace_name, ROUND(SUM(bytes)/(1024*1024*1024),6) total
FROM dba_data_files
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
order by a.tablespace_name desc;
EOF
echo -e "8、Crontab定时任务配置: \n`crontab -l`\n" >> ${TXT_NAME}
echo "9、备份文件详情: " >> ${TXT_NAME}
ssh_server ${db_server[$i]} ${db_server_user[$i]} ${db_server_pwd[$i]} "ls -lhrt /backup"|sed -n '/password:/,$p'|grep -v "password:" |sed -e 's/
$//g' >> ${TXT_NAME}
#--------------生成图片报告-------------------
#paps --font=9 ${TXT_NAME} > ${FILE_NAME}.ps
#ps2pdf ${FILE_NAME}.ps ${FILE_NAME}.pdf
#convert -background white -extent 600x900 ${FILE_NAME}.pdf ${FILE_NAME}.png
done #生成应用服务器检查报告
echo "应用服务器数: ${#app_server[@]}"
for (( i=0; i<${#app_server[@]}; i++))
do
echo "生成应用服务器 ${app_server[$i]}的检查报告..."
echo -e "\n\n================================================================================" >> ${TXT_NAME}
echo "1、应用服务器IP: ${app_server[$i]}" >>${TXT_NAME}
echo "2、巡检时间: `date "+%F %T 星期%a"`" >>${TXT_NAME}
echo -e "3、服务器内核信息: \c">>${TXT_NAME}
ssh_server ${app_server[$i]} ${app_server_user[$i]} ${app_server_pwd[$i]} "uname -r"
echo -e "4、服务器主机名: \c" >>${TXT_NAME}
ssh_server ${app_server[$i]} ${app_server_user[$i]} ${app_server_pwd[$i]} "hostname"
echo "5、磁盘使用详情:" >>${TXT_NAME}
ssh_server ${app_server[$i]} ${app_server_user[$i]} ${app_server_pwd[$i]} "df -hT"
done #去掉多余^m符号(^M必须按住ctrl 然后再按V和M打印出才有效)
sed -i 's///g' ${TXT_NAME}
server_patrol.sh服务器巡查脚本的更多相关文章
- Linux生产服务器Shell脚本分享
Linux生产服务器Shell脚本分享 2012-6-6 86市场网 linux 作为一名Linux/unix系统管理员,我经常遇到人问这个问题:shell能做什么?PHP这么强大,为什么不用PHP来 ...
- 获取linux服务器基本信息脚本
为了方便日常运维写的一段简单脚本,用于集中获取服务器操作系统.CPU.内存使用.负载.硬盘使用.网络信息. 脚本比较简单,就不解释了,有兴趣的朋友请自行查看. #!/bin/bash##Name:sy ...
- JAVA执行远端服务器的脚本
JAVA执行远端服务器的脚本 问题描述 实现思路 技术要点 代码实现 问题描述 工作中遇到这样一个问题,我们的应用为了实现高可用会采取双机部署,拓扑图大致如下: 这种方案可以简单的保证高可用,即便应用 ...
- springboot Jar包 部署到Linux服务器运行脚本
1.jar包同级目录 , 如下: #!/bin/sh RESOURCE_NAME=demo.jar tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep ...
- Spring Boot 应用 快速发布到linux服务器的脚本代码示例
前提说明:spring boot 应用打包成jar包之后要部署到Linux服务器上面运行,我用的nohup java -jar 命令,但是代码更新之后重新部署的时候覆盖原来的项目,又要手动运行ps - ...
- 阿里云服务器挖矿脚本bioset攻击解决
1.问题出现 一大早刚起床,阿里云就给我发了一条短信,提醒我服务器出现紧急安全事件:挖矿程序 阿里云“贴心”地提供了解决方法,不过需要购买企业版的安全服务,本着能自己动手就不花钱原则自己搞了起来 于是 ...
- ansible-playbook编写服务器初始化脚本
1.原理:通过limit的参数,限制新定义的服务器.即可给新买的服务器初始化优化.(如下图所示) 首先我们编写一个总入口的palybook脚本: init.yml --- - hosts: all u ...
- 停电后,在UPS电源下服务器自动关机脚本
一年总有那么几次莫明停电,公司的服务器经不起这样的折腾 写了一个断电后UPS备用电源自动关机的脚本 原理就是检测路由器网关是否能ping通,长时间持续ping不通视为停电了 路由器不要接到ups上 用 ...
- 微服务状态之python巡查脚本开发
背景 由于后端微服务架构,于是各种业务被拆分为多个服务,服务之间的调用采用RPC接口,而Nacos作为注册中心,可以监听多个服务的状态,比如某个服务是否down掉了.某个服务的访问地址是否改变.以及流 ...
- 基于ntp的多服务器时间同步脚本
server服务器每1个小时更新一次时间,server服务器旗下同步服务器每5秒钟同步一次时间,同步服务器与外网不做交互,由server服务器进行同步时间.所以保证每一台同步服务器时间一致. #vi ...
随机推荐
- Java垃圾回收器总结
什么是Java垃圾回收器 Java垃圾回收器是Java虚拟机(JVM)的三个重要模块(另外两个是解释器和多线程机制)之一,为应用程序提供内存的自动分配(Memory Allocation).自动回收( ...
- echarts中label上下两行展示
如上图展示 series: [ //系列列表 { name: '设备状态', //系列名称 type: 'pie', //类型 pie表示饼图 radius: ['50%', '70%'], //饼图 ...
- JPEG格式研究——(2)JPEG文件格式
JPEG文件除了图像数据之外,还保存了与图片相关的各种信息,这些信息通过不同类型的TAG存储在文件中. TAG JPEG通过TAG标记压缩书记之外的信息.所有的TAG都包含一个TAG类型,TAG类型大 ...
- 使用 yum 安装 nginx
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm ...
- vue ssr error: TypeError: Cannot read property 'replace' of undefined
在开发vue ssr应用时, yarn build yarn start 之后启动正常: info Server running at: http://0.0.0.0:6606 在访问页面时,发现页 ...
- Fiddler抓包数据乱码
前情 最近在项目测试中,使用到Fiddler来抓包看接口请求相关的情况 坑 通过Fiddler抓包,在Fiddler中看到的数据都是正常的,但是保存到本地,发现数据是乱码 Why? 工具里的提示是这样 ...
- 总结几个Qt版本的冷知识
Qt4.8.7是Qt4的终结版本,是Qt4系列版本中最稳定最经典的(很多嵌入式板子还是用Qt4.8),其实该版本是和Qt5.5差不多时间发布的.参考链接 https://www.qt.io/blog/ ...
- [转]奇异值分解(SVD)方法求解最小二乘问题的原理
原文链接:奇异值分解(SVD)方法求解最小二乘问题的原理 翻译 搜索 复制
- 前后端分离模式下Java Web开发中的技术栈概图
参考链接1:前后端的分离模式 参考链接2:浅谈前后端分离开发模式 参考链接3:前后端分离开发模式介绍
- IM跨平台技术学习(十三):从理论到实践,详细对比Electron和Tauri的优劣
本文由京东技术王泽知分享,原题"基于Web的跨平台桌面应用开发",下文进行了排版和内容优化. 1.引言 近些年来,跨平台跨端一直是比较热门的话题,Write once, run a ...