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 ...
随机推荐
- spring gateway 学习
为什么需要使用网关 1.实现统一认证 2.统一一个域名,解决调用困难. 3.协议转换 将不友好的协议转成友好的协议. spring cloud gateway 是什么 是spring cloud 的第 ...
- To B企业:2025继续打价格战,只有死路一条
从双十一数不清的促销.满减还有消费券,到大模型厂商的"你低价,我免费"中可以窥见,最近几年,在产品泛滥.市场红利消失的困境中,"价格战"已从To C卷到To B ...
- DASCTF X CBCTF 2023 Misc Justlisten WP
DASCTF X CBCTF 2023 Misc Justlisten WP 又是一道很抽象的misc题 首先附件给了一个汉信码,扫码得到: 提示我们使用oursecret: password为0ur ...
- vue前端代码npm install报错的解决方法
npm install,报错: npm WARN tarball tarball data for has-bigints@https://registry.npmmirror.com/has-big ...
- 在 IdentityServer4 中创建客户端
创建客户端 在创建了 IdentityServer4 服务器之后,我们可以准备从获取一个访问令牌开始. 1. 客户端凭证式验证流 在 OpenID Connect 中,最为简单的验证方式为客户端凭借方 ...
- 深入理解二叉查找树(BST)的重要查找操作
二叉查找树 (Binary Search Tree, 简称 BST) 是一种基本的数据结构,其设计核心在于每个节点的值都满足以下性质: 左子树的所有节点值均小于当前节点值. 右子树的所有节点值均大于当 ...
- eclipse中汉字横着的问题解决
最近在eclipse中加上中午注释,出现那种汉字是横着的情况,解决方案如下: 方法一: 同一种字体有两种显示方式,比如Fixedsys Excelsior 3.01和@Fixedsys Excelsi ...
- 基于Netty,从零开发IM(四):编码实践篇(系统优化)
本文由作者"大白菜"分享,有较多修订和改动.注意:本系列是给IM初学者的文章,IM老油条们还望海涵,勿喷! 1.引言 前两篇<编码实践篇(单聊功能)>.<编码实践 ...
- 视频分析框架VideoPipe完整介绍
(2024年4月编写) github地址 https://github.com/sherlockchou86/video_pipe_c 作者微信 zhzhi78(备注 videopipe),拉群交流( ...
- AngleSharp 自带的HttpRequest参数设置
AngleSharp自带一个获取网址源码的api,可以方便的从web取得html var config = Configuration.Default.WithDefaultLoader(); var ...