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 ScheduledThreadPoolExecutor延迟或周期性执行任务
ImportNew注: 本文由新浪微博:@小飞侠_thor投稿至ImportNew.感谢@小飞侠_thor ! 如果你希望分享好的原创文章或者译文,欢迎投稿到ImportNew. Java提供的Tim ...
- 项目部署工具之walle
最近部署walle进行线上项目的上线发布,安装中遇到的问题,在此记录 walle(http://www.walle-web.io) git地址:https://github.com/meolu/wal ...
- Redis常见问题汇总
日常使用中Redis中配到的问题汇总 1. RedisDesktopManager提示:Connection error: QRedisClient compiled without ssh supp ...
- opencv imshow 大图片显示,拖动显示
用imshow显示大图片,不能完整显示,不方便.结合网友的代码,修改成现在的代码,可以拖动图片,方便查看完整图片.而且方便调试,只需要用MatShow替换imshow. struct MousePar ...
- 鸿蒙NEXT开发案例:世界时间表
[引言] 本案例将展示如何使用鸿蒙NEXT框架开发一个简单的世界时钟应用程序.该应用程序能够展示多个城市的当前时间,并支持搜索功能,方便用户快速查找所需城市的时间信息.在本文中,我们将详细介绍应用程序 ...
- 在 .NET 环境下访问 SOAP 服务
在 .NET 环境下访问 SOAP 服务 SOAP 服务有着悠久的历史,目前仍然存在大量的 SOAP 服务,它是基于 HTTP 协议和 XML 技术的简单对象访问协议. 在 .NET Framewor ...
- eShopOnContainer 中 unauthorized_client error 登录错误处理
在准备好 eShopOnContainer 环境,运行起来之后,不幸的是,我遇到了不能登录的错误. 从错误信息中,可以看到 unauthorized_client 的内容.这是为什么呢? 从 eSho ...
- ARGOCD用户管理
1.创建用户alice kubectl apply -f argocd-cm.yaml apiVersion: v1 kind: ConfigMap metadata: name: argocd-cm ...
- Mac 配置多版本JDK
@ 目录 前言 一.下载并安装多个JDK版本 二.配置环境变量 三.切换JDK版本 四.下篇预告!!! 总结 前言 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i. 提示:以下是本篇文章正文 ...
- 快速生成视频互动直播包含会议直播APP(Android)
阿里云服务器推荐购买99元 首先此应用基于腾讯云实时音视频TRTC.注册腾讯云https://console.cloud.tencent.com/trtc 并完成实名认证开始. 安卓直播高级版 包括直 ...