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 ...
随机推荐
- 如何快速构建基于Spring4.0的Rest API(攻略)
本文由 ImportNew - 邬柏 翻译自 javacodegeeks.如需转载本文,请先参见文章末尾处的转载要求. ImportNew注:如果你也对Java技术翻译分享感兴趣,欢迎加入我们的 Ja ...
- Docker可视化容器管理工具之Portainer
官网:https://www.portainer.io/ 仓库地址:https://hub.docker.com/r/portainer/ Portainer 是一个轻量级的管理 UI ,可让你轻松管 ...
- MySQL8.0之特性
MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能.下面我们将简要介绍下 MySQL 8.0 中值得关注的 ...
- springboot 参数注解 注入参数
什么时注解参数 说明 我们在 使用spring mvc 的时候会使用这样的注解 @ResponseBody 这样,spring mvc 会将 客户端传来的数据,自动构建成 相应类型的对象. 有些情况下 ...
- S2P医药营销智能管理平台特点和优势
S2P医药营销智能管理平台是正也科技打造的一个专为医药行业设计的综合性营销解决方案,旨在通过智能化.数据驱动的方式提升医药企业的营销效率和效果.以下是关于S2P医药营销智能管理平台的一些主要特点和优势 ...
- Linux编译安装MySQL__5.7.26记录
系统:centos7.4(3.10内核) 1.查找并清除自带的数据库# rpm -qa | grep mariadb# rpm -e --nodeps mariadb-libs-5.5.44-2.el ...
- 【双堆懒删除】codeforces 1294 D. MEX maximizing
前言 双堆懒删除 当需要维护若干元素中的最大值(或最小值)时,可以用一个堆维护,但是堆只擅长处理堆顶元素,对堆中任意元素的处理就束手无策了.此时,可以引入另外一个堆,我们定义原来的堆为保存堆 \(ex ...
- NATS: 自定义服务 (Service)
使用 NATS 服务框架来创建服务会变得非常简单,基于 NATS 的服务框架,NAST 的客户端库可以更简单的构建.服务发现和监控服务.服务框架自动将所有的订阅归类到一个队列组中,提供构建基于层次化的 ...
- 06 IdentityServer4 中支持外部标识提供器
06. IdentityServer4 External Providers .NET Core 3.1 January 24, 2020| deblokt| in category Tutorial ...
- OpenType 字体文件组织结构
OpenType 字体文件结构 OpenType 字体的组织 https://docs.microsoft.com/en-us/typography/opentype/spec/otff#organi ...