首页 > 其他分享 >server_patrol.sh服务器巡查脚本

server_patrol.sh服务器巡查脚本

时间:2023-11-20 16:24:28浏览次数:34  
标签:echo patrol NAME app db server sh TXT

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}

 

标签:echo,patrol,NAME,app,db,server,sh,TXT
From: https://www.cnblogs.com/wxp100/p/17844233.html

相关文章

  • linux shell "<" 、 "<<" 、 ">" 、">>" 的含义
    linux关于标准输入输出的规定Linux规定一下文件描述符文件描述符文件对应设备0标准输入keyboard,mouse1标准输出屏幕监视器2错误输出屏幕监视器输出重定向>,>>>和>>都是输出重定向符号其中>是重写>>是追加到文件进阶Shell中1>&22>&1&>......
  • centos9升级openssh 9.4p1
    本文参考:https://www.cnblogs.com/wenxiao1-2-3-4/p/16481300.html#!/bin/shcd/etc/yum.repos.dmkdirbackupmvCent*backupwget-O/etc/yum.repos.d/CentOS-Base.repohttps://mirrors.aliyun.com/repo/Centos-9.repoyum-ycleanallyum-ymakecache #以上设置云源cd......
  • IdentityServer4
    第一步:创建NetCore项目第二步:安装Nuget包IdentityServer4IdentityServer4.AspNetIdentityIdentityServer4.EntityFrameworkMicrosoft.AspNetCore.Identity.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.SqlServerMicrosoft.EntityFrameworkCore.Tools第三步:配置(appse......
  • SQL Server数据库(自动、手动)备份
      数据库自动备份:1.首先需要启动SQLServerAgent服务,这个服务如果不启动是无法运行新建作业的。点击“开始”–“所有程序”–“MicrosoftSQLServer2008”–“启动SQLServerManagementStudio”登录数据库,点击管理–维护计划–右击维护计划向导如图所示:    ......
  • 通过PowerShellPlus示例脚本学习PowerShell-通过WIndows集成验证登录SQLServer
    ##=====================================================================##Title:Connect-MSSQL-IPWindowsAuth##Description:ConnecttoSQLServerusingIPaddress,instanceand##Windowsauthentication##Author:Idera......
  • 简单统计SQLSERVER用户数据表大小(包括记录总数和空间占用情况)
    在SQLSERVER,简单的组合sp_spaceused和sp_MSforeachtable这两个存储过程,可以方便的统计出用户数据表的大小,包括记录总数和空间占用情况,非常实用,在SqlServer2K和SqlServer2005中都测试通过。/*1.execsp_spaceused'表名'      (SQL统计数据,大量事务操作后可能不准)2.exe......
  • (uniapp)小程序实现自定义弹框,自定义样式showmodal
    在components里新建自定义弹框组件——modal.vue<template><!--自定义弹窗--><viewclass="_showModal"v-show="show"><viewclass="_shade"></view><viewclass="_modalBox">......
  • shell运维脚本优化
    我们在平常工作中,你是否感觉shell脚本只是命令的堆砌;很多时候只是为了实现功能而没有好的组织结构;自己的脚本都不想再看一遍;此让你的shell脚本有python一样的美感并且极易维护,真的是shell脚本写到停不下来。现以k8s发版脚本为例,看一下脚本的优化过程:#!/bin/bashset-euns=$......
  • [emerg] could not build server_names_hash, you should increase server_names_hash
    解决nginx报错nginx:[emerg]couldnotbuildserver_names_hash,youshouldincreaseserver_names_hash_bucket_size:32nginx:configurationfilexxxx/conf/nginx.conftestfailed报错原因该报错产生的原因主要是因为Nginx中的server配置中server_name的定义值过长......
  • sharding分表应用笔记(三)——多数据源路由
    sharding分表应用笔记(三)——多数据源路由目录sharding分表应用笔记(三)——多数据源路由1背景2配置2.1命名空间配置2.2spring-jdbc路由配置3指定路由3.1自定义注解3.2功能实现3.3用例1背景应用背景:物理数据源只有一个;对于部分数据量大的表实行按月分表处理,其他的表仍然......